DataWorks Data Integration は、他のデータソースから MongoDB データソースにデータを書き込むことができる MongoDB Writer を提供しています。このトピックでは、Data Integration のバッチ同期タスクを使用して、MaxCompute データソースから MongoDB データソースにデータを同期する方法の例を示します。
前提条件
DataWorks がアクティブ化され、MaxCompute データソースが DataWorks ワークスペースに追加されていること。
Data Integration 専用のリソースグループが購入および構成されていること。このリソースグループは、このトピックのバッチ同期タスクを実行するために使用されます。詳細については、「Data Integration 専用のリソースグループを作成して使用する」をご参照ください。
説明新バージョンのリソースグループも使用できます。詳細については、「サーバーレスリソースグループを作成して使用する」をご参照ください。
準備
この例では、データ同期用に MongoDB データコレクションと MaxCompute テーブルを準備する必要があります。
MaxCompute テーブルを準備し、テーブルのデータを作成します。
test_write_mongoという名前のパーティションテーブルを作成します。パーティションフィールドはptです。CREATE TABLE IF NOT EXISTS test_write_mongo( id STRING , col_string STRING, col_int int, col_bigint bigint, col_decimal decimal, col_date DATETIME, col_boolean boolean, col_array string ) PARTITIONED BY (pt STRING) LIFECYCLE 10;パーティションフィールドに
20230215の値を追加します。insert into test_write_mongo partition (pt='20230215') values ('11','name11',1,111,1.22,cast('2023-02-15 15:01:01' as datetime),true,'1,2,3');パーティションテーブルが正しく作成されていることを確認します。
SELECT*FROM test_write_mongo WHEREpt='20230215';
パーティション化された MaxCompute テーブルから読み取ったデータを書き込む MongoDB データコレクションを準備します。
この例では、ApsaraDB for MongoDB を使用し、
test_write_mongoという名前のデータコレクションを作成します。db.createCollection('test_write_mongo')
バッチ同期タスクを構成する
手順 1:MongoDB データソースを追加する
MongoDB データソースを追加し、データソースと Data Integration 専用のリソースグループ間のネットワーク接続が確立されていることを確認します。詳細については、「MongoDB データソース」をご参照ください。
手順 2:バッチ同期タスクを作成して構成する
DataWorks コンソールの DataStudio ページでバッチ同期タスクを作成し、バッチ同期タスクのソースとデスティネーションに関連する項目などの項目を構成します。この手順では、構成する必要がある項目の一部のみについて説明します。その他の項目については、デフォルト値を保持します。詳細については、「コードレス UI を使用してバッチ同期タスクを構成する」をご参照ください。
データソースと Data Integration 専用のリソースグループ間のネットワーク接続を確立します。
手順 1 で追加した MongoDB データソース、追加した MaxCompute データソース、および Data Integration 専用のリソースグループを選択します。次に、データソースとリソースグループ間のネットワーク接続をテストします。
データソースを選択します。
データ準備手順で準備したパーティション化された MaxCompute テーブルと MongoDB データコレクションを選択します。次の表は、バッチ同期タスクの主要なパラメーターを構成する方法について説明しています。
パラメーター
説明
書き込みモード(上書きするかどうか)
MongoDB データコレクションの既存のデータを上書きするかどうかを指定します。このパラメーターを [はい] に設定する場合は、
ReplaceKeyパラメーターを構成する必要があります。書き込みモード(上書きするかどうか)いいえ に設定すると、データは MongoDB データコレクションに新しいデータエントリとして挿入されます。[いいえ] はデフォルト値です。
はい に設定する場合は、
ReplaceKeyパラメーターを構成する必要があります。この設定により、既存のデータエントリが、同じプライマリキー値を持つ新しいデータエントリによって上書きされます。
ReplaceKey:各データレコードのプライマリキー。データはプライマリキーに基づいて上書きされます。プライマリキー列は 1 つだけ指定できます。ほとんどの場合、MongoDB データコレクションのプライマリキーが使用されます。
説明書き込みモード(上書きするかどうか)パラメーターを はい に設定し、_id フィールド以外のフィールドをプライマリキーとして指定すると、タスクの実行時に次のエラーのようなエラーが発生することがあります:更新の適用後、(不変の)フィールド '_id' が _id:"2" に変更されていることがわかりました。その理由は、_id フィールドの値が、デスティネーション MongoDB データコレクションに書き込まれるデータの一部で replaceKey パラメーターの値と一致しないためです。詳細については、「エラー:更新の適用後、(不変の)フィールド '_id' が _id:"2" に変更されていることがわかりました」をご参照ください。書き込み前に実行するステートメント
データ同期前に実行する SQL ステートメント。SQL ステートメントは JSON 形式で構成し、
typeプロパティとjsonプロパティを構成できます。type:必須。有効な値:removeおよびdrop。値は小文字でなければなりません。json:typeがremoveに設定されている場合、このプロパティは必須です。標準の MongoDB クエリ操作の構文に基づいてプロパティを構成する必要があります。詳細については、「ドキュメントのクエリ」を参照してください。typeがdropに設定されている場合、このプロパティは必須ではありません。
フィールドマッピングを構成します。
MongoDB データソースが追加されている場合、デフォルトでは ソースの行のフィールドをデスティネーションの同じ行のフィールドにマッピングする 方法が使用されます。
アイコンをクリックして、ソーステーブルのフィールドを手動で編集することもできます。次のサンプルコードは、ソーステーブルのフィールドを編集する方法の例を示しています。{"name":"id","type":"string"} {"name":"col_string","type":"string"} {"name":"col_int","type":"long"} {"name":"col_bigint","type":"long"} {"name":"col_decimal","type":"double"} {"name":"col_date","type":"date"} {"name":"col_boolean","type":"bool"} {"name":"col_array","type":"array","splitter":","}フィールドを編集すると、ソースフィールドとデスティネーションフィールド間の新しいマッピングがタスクの構成タブに表示されます。
手順 3:バッチ同期タスクをコミットしてデプロイする
標準モードのワークスペースを使用していて、本番環境でバッチ同期タスクを定期的にスケジュールする場合は、タスクを本番環境にコミットしてデプロイできます。詳細については、「ノードをデプロイする」をご参照ください。
手順 4:バッチ同期タスクを実行し、同期結果を表示する
上記の構成を完了したら、バッチ同期タスクを実行できます。実行が完了したら、MongoDB データコレクションに同期されたデータを表示できます。
付録:データ同期中のデータ型変換
type パラメーターの値
type パラメーターでは、次のデータ型がサポートされています:INT、LONG、DOUBLE、STRING、BOOL、DATE、および ARRAY。
type が ARRAY に設定されている場合に MangoDB データコレクションに書き込まれるデータ
type パラメーターを ARRAY に設定する場合は、splitter プロパティを構成する必要があります。これにより、データは配列として MongoDB データコレクションに書き込むことができます。例:
ソースデータは文字列です:
a,b,c。バッチ同期タスクの type パラメーターを
ARRAYに、splitter プロパティを,に設定します。タスクの実行時にデスティネーションに書き込まれるデータは
["a","b","c"]です。