RestAPI データソースを作成して、データ同期タスクを使用して、RESTful API 経由で JSON データを MaxCompute などの別のデータソースに書き込むことができます。RestAPI データソースは、他のデータソースからデータを受信する宛先として使用することもできます。このトピックでは、DataWorks における RestAPI データソースのデータ同期機能について説明します。
制限事項
現在、このデータソースは サーバーレスリソースグループ と Data Integration 専用リソースグループ のみをサポートしています。
タイムアウトパラメーターは設定できません。DataWorks の組み込みリクエストタイムアウト期間は 60 秒です。API クエリの応答に 60 秒以上かかると、タスクは失敗します。
サポートされているフィールドタイプ
データを宛先に同期する場合、単層のテーブルスキーマのみがサポートされます。ネストされたフィールド構造はサポートされていません。たとえば、API が `{data: {user: { id: 1, name:'lily'}, value: 123}}` という構造を返す場合、フィールドは宛先で `user_id`、`user_name`、`value` などの並列フィールドとして処理される必要があります。
タイプ分類 | Data Integration 列構成タイプ |
整数 | LONG, INT |
文字列 | STRING |
浮動小数点 | DOUBLE, FLOAT |
ブール値 | BOOLEAN |
日時 | DATE |
データソースの追加
DataWorks で同期タスクを開発する前に、「データソース管理」の指示に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際に、DataWorks コンソールでパラメーターの infotip を表示して、パラメーターの意味を理解できます。
データ同期タスクの開発
同期タスクの構成のエントリポイントと手順については、次の構成ガイドをご参照ください。
単一テーブルのオフライン同期タスクの構成ガイド
手順については、「コードレス UI 構成」または「コードエディタ構成」をご参照ください。
コードエディタ構成のすべてのパラメーターとサンプルコードのリストについては、「付録: コードとパラメーター」をご参照ください。
例
よくある質問
データリクエストのページ数のみを指定できますか?
回答: はい、できます。
自動ページングはサポートされていますか?たとえば、リクエストパラメーターに対してこれ以上データが返されない場合にページングを停止できますか?
回答: いいえ、サポートされていません。そうしないと、データを分割できません。
ページ数を指定する必要があるが、指定した数が実際のページ数より大きい場合、後続のページが空の場合はどうなりますか?
回答: 後続のページが空の場合、SQL クエリからの空の結果として扱われます。システムは次のクエリに進みます。
単層の JSON 解析のみがサポートされていますか?
回答: はい、そうです。ディープ解析は実行されません。
DataWorks Data Integration で RestAPI の非配列タイプを構成するにはどうすればよいですか?
回答:
readerセクションのparameterセクションで、dataPathパラメーターを非配列データのパスに設定します。たとえば、dataPath:"data.list"です。これにより、プラグインは読み取りたいデータフィールドを見つけることができます。次に、dataModeパラメーターをmultiDataに設定します。この設定は、ソースデータが配列形式でなくても、データを複数の個別のレコードとして処理するように DataWorks に指示します。説明multiDataモードでは、column構成は適用されないことに注意してください。dataPathパラメーターで読み取るデータパスを直接指定する必要があります。次のコードは、DataWorks Data Integration での RestAPI の非配列タイプの構成例を示しています:
reader: { name: "restapi", parameter: { dataPath: "data.list", dataMode: "multiData", // その他のパラメーター } }
付録: スクリプトデモとパラメーターの説明
コードエディタを使用してバッチ同期タスクを構成する
コードエディタを使用してバッチ同期タスクを構成する場合は、統一されたスクリプト形式の要件に基づいてスクリプト内の関連パラメーターを構成する必要があります。詳細については、「コードエディタでタスクを構成する」をご参照ください。次の情報は、コードエディタを使用してバッチ同期タスクを構成する際にデータソースに対して構成する必要があるパラメーターについて説明しています。
Reader スクリプトデモ
次のコードはスクリプトの例です:
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"restapi", "parameter":{ "url":"http://127.0.0.1:5000/get_array5", "dataMode":"oneData", "responseType":"json", "column":[ { "type":"long", "name":"a.b" // a.b パスからデータを検索します。 }, { "type":"string", // a.c パスからデータを検索します。 "name":"a.c" } ], "dirtyData":"null", "method":"get", "socketTimeout":"60000", "defaultHeader":{ "X-Custom-Header":"test header" }, "customHeader":{ "X-Custom-Header2":"test header2" }, "parameters":"abc=1&def=1" }, "name":"restapireader", "category":"reader" }, { "stepType":"stream", "parameter":{ }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"" }, "speed":{ "throttle":true, // throttle が false に設定されている場合、mbps パラメーターは有効にならず、データレートは制限されません。throttle が true に設定されている場合、データレートは制限されます。 "concurrent":1, // ジョブの同時実行数。 "mbps":"12"// 最大データレート。1 mbps は 1 MB/s に相当します。 } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }次のコードは、コードエディタでの構成を示しています:
Restapi プラグインが HTTP または HTTPS リクエストを送信した後、JSON 形式の応答本文を受信します。dataPath パラメーターは、本文からデータを抽出するために使用される JSONPath を指定します。次の 2 つの例は、パラメーターの構成方法を示しています: 例 1: API は次の本文を返します。ビジネスデータは DATA フィールドにあり、API は一度に複数のデータ行を返します。DATA は配列です。 { "HEADER": { "BUSID": "bid1", "RECID": "uuid", "SENDER": "dc", "RECEIVER": "pre", "DTSEND": "202201250000" }, "DATA": [ { "SERNR": "sernr1" }, { "SERNR": "sernr2" } ] } DATA から複数のデータ行を複数の同期レコードとして抽出する場合は、column を "column": [ "SERNR" ]、dataMode を "dataMode": "multiData"、dataPath を "dataPath": "DATA" に設定します。 例 2: API は次の本文を返します。ビジネスデータは content.DATA フィールドにあり、API は一度に 1 行のデータを返します。DATA はオブジェクトです。 { "HEADER": { "BUSID": "bid1", "RECID": "uuid", "SENDER": "dc", "RECEIVER": "pre", "DTSEND": "202201250000" }, "content": { "DATA": { "SERNR": "sernr2" } } } content.DATA から 1 行のデータを 1 つの同期レコードとして抽出する場合は、column を "column": [ "SERNR" ]、dataMode を "dataMode": "oneData"、dataPath を "dataPath": "content.DATA" に設定します。
Reader スクリプトパラメーター
次のパラメーターは、データソースを追加して Data Integration ノードを構成するときに使用されます。
このプラグインはスケジューリングパラメーターをサポートしていません。
パラメーター | 説明 | 必須 | デフォルト値 |
url | RESTful API のアドレス。 | はい | なし |
dataMode | RESTful リクエストに対して返される JSON データのフォーマット。
| はい | なし |
responseType | 返されるデータのフォーマット。JSON のみがサポートされています。 | はい | JSON |
column | 読み取るフィールドのリスト。type パラメーターはソースデータのタイプを指定し、name パラメーターは現在の列のデータを取得する JSON パスを指定します。列フィールドを指定できます。例: "column":[{"type":"long","name":"a.b" // a.b パスからデータを検索します。}, {"type":"string","name":"a.c" // a.c パスからデータを検索します。}] 各列に type と name パラメーターを指定する必要があります。 | はい | なし |
dataPath | 返された結果から単一の JSON オブジェクトまたは JSON 配列をクエリするために使用されるパス。 | いいえ | なし |
method | リクエストメソッド。有効な値: get および post。 | はい | なし |
socketTimeout | RESTful API からデータにアクセスするためのソケットタイムアウト期間。単位: ミリ秒。 | いいえ | 60000 |
customHeader | RESTful API に渡されるヘッダー情報。 | いいえ | なし |
parameters | RESTful API に渡されるパラメーター情報。
| いいえ | なし |
dirtyData | 列の指定された JSON パスでデータが見つからない状況を処理するメソッド。
| はい | dirty |
requestTimes | RESTful アドレスからデータをリクエストする回数。
| はい | single |
requestParam | requestTimes を multiple に設定した場合、pageNumber などのループ用のパラメーターを指定する必要があります。プラグインは、指定された startIndex、endIndex、および step パラメーターに基づいて、ループ内で pageNumber パラメーターを RESTful API に渡し、複数のリクエストを送信します。 | いいえ | なし |
startIndex | ループリクエストの開始インデックス。開始インデックスはループに含まれます。 | いいえ | なし |
endIndex | ループリクエストの終了インデックス。終了インデックスはループに含まれます。 | いいえ | なし |
step | ループリクエストのステップサイズ。 | いいえ | なし |
authType | 認証方式。有効な値:
| いいえ | なし |
authUsername/authPassword | 基本認証のユーザー名とパスワード。 | いいえ | なし |
authToken | トークン認証のトークン。 | いいえ | なし |
accessKey/accessSecret | Aliyun API 署名認証のアカウント情報。 | いいえ | なし |
Writer スクリプトデモ
{
"type":"job",
"version":"2.0",
"steps":[
{
"stepType":"stream",
"parameter":{
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"restapi",
"parameter":{
"url":"http://127.0.0.1:5000/writer1",
"dataMode":"oneData",
"responseType":"json",
"column":[
{
"type":"long", // 列データを a.b パスに配置します。
"name":"a.b"
},
{
"type":"string", // 列データを a.c パスに配置します。
"name":"a.c"
}
],
"method":"post",
"defaultHeader":{
"X-Custom-Header":"test header"
},
"customHeader":{
"X-Custom-Header2":"test header2"
},
"parameters":"abc=1&def=1",
"batchSize":256
},
"name":"restapiwriter",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0" // エラーレコードの数。
},
"speed":{
"throttle":true,// throttle が false に設定されている場合、mbps パラメーターは有効にならず、データレートは制限されません。throttle が true に設定されている場合、データレートは制限されます。
"concurrent":1, // ジョブの同時実行数。
"mbps":"12"// 最大データレート。1 mbps は 1 MB/s に相当します。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Writer スクリプトパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
url | RESTful API のアドレス。 | はい | なし |
dataMode | RESTful リクエストで渡される JSON データのフォーマット。
| はい | なし |
column | 生成された JSON データに対応するフィールドパスのリスト。type パラメーターはソースデータのタイプを指定し、name パラメーターは現在の列のデータが配置される JSON パスを指定します。列フィールドを指定できます。例: "column":[{"type":"long","name":"a.b" // 列データを a.b パスに配置します。}, {"type":"string","name":"a.c" // 列データを a.c パスに配置します。}] 説明 各列に type と name パラメーターを指定する必要があります。 | はい | なし |
dataPath | データ結果が配置される JSON オブジェクトのパス。 | いいえ | なし |
method | リクエストメソッド。有効な値: post および put。 | はい | なし |
customHeader | RESTful API に渡されるヘッダー情報。 | いいえ | なし |
authType | 認証方式。
| いいえ | なし |
authUsername/authPassword | 基本認証のユーザー名とパスワード。 | いいえ | なし |
authToken | トークン認証のトークン。 | いいえ | なし |
accessKey/accessSecret | Aliyun API 署名認証のアカウント情報。 | いいえ | なし |
batchSize | dataMode が multiData に設定されている場合の、単一リクエスト内のレコードの最大数。 | はい | 512 |