DataWorks のデータ統合における単一テーブルのリアルタイム同期タスクでは、JSON 解析コンポーネントを使用して、ソースからの JSON データを対応するテーブルデータに解析できます。
JSON 解析コンポーネントの作成と設定
ステップ 1:データ統合タスクの設定
データソースを作成します。 詳細については、「データソース管理」をご参照ください。
データ統合タスクを作成します。 詳細については、「単一テーブルのリアルタイム同期タスクの設定」をご参照ください。
説明単一テーブルのリアルタイムデータ統合タスクでは、ソースコンポーネントと送信先コンポーネントの間にデータ処理コンポーネントを追加できます。 詳細については、「サポートされているデータソースと同期ソリューション」をご参照ください。
ステップ 2:JSON 解析コンポーネントの追加
単一テーブルのリアルタイム同期タスクで、データ処理 スイッチをオンにし、[+ノードの追加] をクリックして、JSON 解析 コンポーネントを選択します。
ノードの名前と説明を入力し、JSON 解析コンポーネントを設定します。
重要JSON データ構造を取得するには、まずデータソース (Kafka など) で データサンプリング を実行します。
固定 JSON 解析フィールドの追加
フォーマットされた JSON データの取得
JSON ソース
説明
データサンプリングから JSON データを取得
データサンプリングを実行した後、JSON 解析固定フィールドの追加 をクリックして JSON 解析固定フィールド ダイアログボックスを開きます。 [ソースフィールドの選択] を行い、JSON 形式のデータ構造を取得します をクリックして JSON データ構造を取得します。
手動で入力した JSON データを取得
データサンプリングを実行していない場合、またはソースデータが空の場合は、フィールドを手動で編集できます。
[JSON テキストの編集] ボタンをクリックして編集モードに入ります。 [JSON テキストの編集] ウィンドウで JSON コンテンツを手動で入力し、選択に戻る をクリックしてフィールドを選択します。
手動で フィールドの追加 を行います。 アップストリームのフィールド値を取得できず、[JSON テキストの編集] ボタンをクリックして JSON コンテンツを手動でアップロードしていない場合は、値のコンテンツを編集して固定フィールド解析ルールを手動で定義し、JSON コンテンツを取得できます。 手動で追加されたフィールドのパラメーターは次のとおりです。
パラメーター
説明
フィールド名
ダウンストリームノードで解析された新しいフィールドの参照名です。
値
JSON 解析パスを指定します。 解析構文は次のとおりです。
$:ルートノードを表します。.:子ノードを表します。[]:[number]は配列インデックスを表し、0 から始まります。[*]:配列を複数行出力に展開します。 各要素はレコードの他のフィールドと組み合わされて独立した行を形成し、ダウンストリームノードに出力されます。
説明JSON 解析パス内の JSON フィールド名には、英字、数字、ハイフン (-)、アンダースコア (_) のみを使用できます。
デフォルト値
アップストリームのテーブルフィールドの変更により JSON 解析パスが存在しない場合のデフォルト値です。
NULL:フィールドに NULL 値が割り当てられます。
塗りつぶしなし:フィールドには値が入力されません。 NULL との違いは、送信先テーブルの対応するフィールドに書き込む際に、そのフィールドにデフォルト値が設定されていれば、NULL ではなくそのデフォルト値が使用される点です。
ダーティデータ:レコードは同期タスクのダーティデータ統計にカウントされ、タスクが異常終了するかどうかはダーティデータ許容設定によって決まります。
定数を手動で入力:手動で入力した定数をフィールド値として使用します。
動的 JSON 解析フィールドの追加
フォーマットされた JSON コンテンツで、動的解析の対象となる JSON オブジェクトフィールドを選択します。 JSON オブジェクト配下の各フィールドの解析設定が、固定出力フィールドに自動的に追加されます。
JSON オブジェクトに動的解析を設定すると、実際の同期タスクの実行中に、JSON オブジェクト内の指定されたパスにある各フィールドは、元の JSON フィールド名と値を持つ STRING 型としてレコードに追加され、ダウンストリームノードに出力されます。 これにより、同期中に指定された JSON オブジェクトの構造が変更されたり、新しいフィールドが追加されたりした場合でも、自動的に識別されてダウンストリームノードに出力されます。
フォーマットされた JSON データの取得
JSON ソース
説明
データサンプリングから JSON データを取得
データサンプリングを実行した後、JSON 解析用の動的フィールドを追加 をクリックして [JSON 動的出カフィールド] ダイアログボックスを開きます。 [ソースフィールドの選択] を行い、JSON 形式のデータ構造を取得します をクリックして JSON データ構造を取得します。
手動で入力した JSON データを取得
データサンプリングを実行していない場合、またはソースデータが空の場合は、フィールドを手動で編集できます。
[JSON テキストの編集] ボタンをクリックして編集モードに入ります。 [JSON テキストの編集] ウィンドウで JSON コンテンツを手動で入力し、選択に戻る をクリックしてフィールドを選択します。
JSON オブジェクトの動的解析
設定方法:
左側の [JSON データ構造] パネルで、対象の JSON オブジェクトフィールド (dynamic など) の横にある選択ボタンをクリックします。 [JSON オブジェクトの指定] 設定が右側の [動的出カフィールド] セクションに自動的に追加され、[値] には対応するパス (
$.dynamicなど) が自動的に入力され、[デフォルト値] は [無視] に設定されます。動的フィールドに c3 が追加されたと仮定します。 変更前後の解析結果は次のとおりです。
_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 解析パスの解析に失敗した場合、または対応するフィールドが存在しない場合のデフォルトの動作を指定します。
無視:動的解析を実行しません。ダーティデータ:レコードは同期タスクのダーティデータ統計にカウントされ、タスクが異常終了するかどうかはダーティデータ許容設定によって決まります。
重複するフィールド名が見つかった場合のポリシー
JSON の動的フィールドがキーと値で展開される場合、最初のレベルのみが展開されます。 展開中に同じ名前のフィールドが既に存在する場合、次のポリシーが適用されます。
上書き:後から展開された値が既存のフィールド値を置き換えます。
破棄:既存のフィールド値が保持され、後から展開された値は破棄されます。
エラー:タスクはエラーを報告して実行を停止します。
次のステップ
データソース と JSON 解析 コンポーネントを設定した後、データ出力プレビュー をクリックして、現在のノードの出力データが要件を満たしているかどうかを確認します。