DataWorks の Data Integration では、リアルタイム単一テーブル同期タスクで JSON 解析コンポーネントを使用して、ソースからの JSON データを構造化テーブルデータに解析できます。
JSON 解析コンポーネントの作成と構成
ステップ 1: Data Integration タスクの構成
データソースを作成します。詳細については、「データソース管理」をご参照ください。
Data Integration タスクを作成します。詳細については、「単一テーブルのリアルタイム同期タスクの構成」をご参照ください。
説明Data Integration の単一テーブルのリアルタイム同期タスクでは、ソースノードと宛先ノードの間にデータ処理ノードを追加できます。詳細については、「サポートされるデータソースと同期ソリューション」をご参照ください。
ステップ 2: JSON 解析コンポーネントの追加
リアルタイム単一テーブル同期タスクで、[データ処理] オプションを有効にし、[+ノードを追加] をクリックして、[JSON 解析] コンポーネントを選択します。
ノードの名前と説明を入力し、JSON 解析コンポーネントを構成します。
重要JSON データ構造を取得するには、まず Kafka などのソースで [データサンプリング] を実行します。
固定フィールド
フォーマットされた JSON データの取得。
方法
説明
図
データサンプリングから JSON を取得
データサンプリング後、[JSON 解析用の固定フィールドを追加] をクリックして [JSON 解析用の固定フィールド] ダイアログボックスを開きます。[フィールドの選択] リストから、JSON データを含むソースフィールドを選択します。次に、[JSON データ構造の取得] をクリックして構造を取得します。

手動入力から JSON を取得
データサンプリングを実行していない場合、またはソースデータが空の場合は、JSON 構造を手動で指定できます。
[JSON テキストの編集] ボタンをクリックしてエディターを開きます。[JSON テキストの編集] ウィンドウで JSON コンテンツを入力し、[選択に戻る] をクリックしてフィールドを選択します。

または、[フィールドを追加] をクリックしてフィールドを手動で追加することもできます。このオプションは、上流フィールドから値を取得できない場合や、サンプル JSON を提供していない場合に使用します。解析ルールを定義するには、値のパスを手動で編集して JSON コンテンツを取得します。パラメーターは以下のとおりです:
パラメーター
説明
フィールド名
新しいフィールドの名前で、下流ノードから参照されます。
値
解析用の JSON パスを指定します。構文は次のとおりです:
$:ルートノードを表します。.:子ノードを表します。[]:[number]は配列インデックスを指定します。インデックスは 0 から始まります。[*]:配列を複数行に展開します。各要素はレコード内の他のフィールドと結合され、個別の行として下流ノードに出力されます。
説明パス内の JSON フィールド名には、英数字、ハイフン (-)、アンダースコア (_) のみを使用できます。
デフォルト値
JSON パスが存在しない場合 (上流テーブルのフィールドの変更など) に使用するデフォルト値。
NULL:フィールド値を NULL に設定します。
入力しない:フィールドは入力されません。
NULLとは異なり、宛先テーブルの対応するフィールドにデフォルト値が構成されている場合、NULL の代わりにそのデフォルト値が使用されます。ダーティデータ:レコードは同期タスクのダーティデータとしてカウントされます。ダーティデータの許容設定によっては、タスクが停止する場合があります。
定数を手動で入力:ユーザー定義の定数をフィールドの値として使用します。

動的フィールド
フォーマットされた JSON ビューで、動的に解析するターゲット JSON オブジェクトを選択します。システムは、その JSON オブジェクト配下の各フィールドに対する解析構成を自動的に追加します。
タスクの実行時、システムは指定された JSON オブジェクトパス内の各フィールドを処理します。元の JSON フィールド名と値 (STRING 型) を使用し、それらをレコードに追加してから下流ノードに送信します。これにより、同期中に追加された構造変更や新しいフィールドが自動的に識別され、下流に渡されます。
フォーマットされた JSON データの取得。
方法
説明
図
データサンプリングから JSON を取得
データサンプリング後、[JSON 解析用の動的フィールドを追加] をクリックして [JSON 解析用の動的出力フィールド] ダイアログボックスを開きます。リストからソースフィールドを選択し、[JSON データ構造の取得] をクリックして JSON データ構造を取得します。

手動入力から JSON を取得
データサンプリングを実行していない場合、またはソースデータが空の場合は、JSON を手動で指定できます。
[JSON テキストの編集] ボタンをクリックして JSON コンテンツを入力し、次に [選択に戻る] をクリックしてフィールドを選択します。

JSON オブジェクトの動的解析
構成:

新しいフィールド
c3がdynamicオブジェクトに追加されたと仮定します。次の表は、解析結果を比較したものです:_value_(STRING)
c1(STRING)
c2(STRING)
c3(STRING)
{ "dynamic": { "c1": 2, "c2": ["a1","b1"] } }2["a1","b1"]未入力
{ "dynamic": { "c1": 2, "c2": ["a1","b1"], "c3": {"name": "jack"} } }2["a1","b1"]{"name": "jack"}
フィールドの手動追加
上流から値を取得できない場合や、サンプル JSON を提供していない場合は、動的フィールドの解析ルールを手動で定義できます。JSON オブジェクトへのパスを手動で編集して、ルールをカスタマイズします:
パラメーター
説明
JSON オブジェクトの指定
動的解析のための JSON オブジェクトへのパスを指定します。構文は次のとおりです:
$:ルートノードを表します。.:子ノードを表します。[]:[number] は配列インデックスを指定します。インデックスは 0 から始まります。
注:パス内の JSON フィールド名には、英数字、ハイフン (-)、アンダースコア (_) のみを使用できます。
デフォルト値
JSON パスが解決できない場合や、対応するオブジェクトが存在しない場合の動作を指定します。
無視:動的解析は実行されません。ダーティデータ:レコードは同期タスクのダーティデータとしてカウントされます。ダーティデータの許容設定によっては、タスクが停止する場合があります。
重複するフィールド名の処理ポリシー。
動的 JSON オブジェクトが展開されるとき、第 1 レベルのキーと値のペアのみが処理されます。このポリシーは、展開されたフィールドが既存のフィールドと同じ名前を持つ場合に、競合をどのように処理するかを決定します。ポリシーは次のとおりです:
上書き:新しく展開されたフィールドの値が、既存のフィールドの値を置き換えます。
破棄:既存のフィールドの値が保持され、新しく展開されたフィールドの値は破棄されます。
エラー:タスクは停止し、エラーを報告します。
次のステップ
[ソース] ノードと [JSON 解析] ノードを構成した後、[シミュレーション実行] をクリックして現在のノードからの出力データをプレビューし、要件を満たしていることを確認します。






