こんにちは、Kouです。
まだご存じの方が少ないかと思いますが、DataWorks 2.0には、JSONデータへのサポートが強化され、JSONドキュメントの処理及び分析が楽となります。IoTやWebアプリケーションなど、さまざまなデータソースから出力するログの形式がJSONで、Log Serviceが収集したJSONデータをどのように加工するのかという質問が見えてくるので、今回の記事は、OSSへ事前にアップロードしたJSONドキュメントを例として、MaxComputeでJSONドキュメントの扱い方について、皆さんご紹介させて頂きたいと思います。
- 事前準備
まず、JSONファイル(text.txt)をOSSへアップロードします。本記事は、次のJSON ドキュメントを使用します。
{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } }, "expensive": 10 }
- JSONドキュメントの同期
まず、Data Integrationを通して、新たなデータソース(OSS)を追加します。本記事は、OSSのバケットとDataWorksプロジェクトが同じリージョンに設定しましたので、OSSのイントラネットエンドポイントを使いました。
次は、下記のMaxComputeSQL文で、JSONドキュメントを格納するテーブルを作成します。また、DataStudioでデータ同期のタスクを新規作成します。
DROP TABLE IF EXISTS json_tab; CREATE TABLE json_tab (data_oss STRING);
続いて、データ同期タスクで、下記の手順でデータソース、ターゲットとフィールドマッピングを設定します。
最後、JSON ドキュメントが 1 行で構成されている必要がありますので、JSON ドキュメントの平坦化をする為に、上記の赤枠のタブをクリックして、スクリプトモードに変換します。スクリプトファイルのうち、"fileFormat"の項目に「text」との値を「binary」に書き換えます。そうすると、JSONデータがjson_tabテーブルの一行の文字列になります。
{ "type": "job", "steps": [ { "stepType": "oss", "parameter": { "fieldDelimiterOrigin": "^", "nullFormat": "", "compress": "", "datasource": "oss", "column": [ { "name": 0, "index": 0, "type": "string" } ], "skipHeader": "false", "encoding": "UTF-8", "fieldDelimiter": "^", "fileFormat": "binary", "object": [ "test_1.txt" ] }, "name": "Reader", "category": "reader" }, { "stepType": "odps", "parameter": { "partition": "", "truncate": true, "datasource": "odps_first", "column": [ "data_oss" ], "emptyAsNull": false, "table": "json_tab" }, "name": "Writer", "category": "writer" } ], "version": "2.0", "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] }, "setting": { "errorLimit": { "record": "" }, "speed": { "throttle": false, "concurrent": 2, "dmu": 1 } } }
下図のように、「select * from json_tab」の構文で、同期されたデータを簡単に確認することもできました。
- JSONドキュメントの分析
MaxCompute には、ランタイム処理中に JSON クエリを実行できる get_json_object という組み込み UDF があります。 このメソッドでは 2 つの引数 (テーブル名とメソッド名) を取り、解析が必要なフラット化された JSON ドキュメントと JSON フィールドが含まれます。 この UDF の動作を確認する例を見てみましょう。
SELECT GET_JSON_OBJECT(json_tab.data_oss,'$.store.bicycle.color'), GET_JSON_OBJECT(json_tab.data_oss,'$.store.bicycle.price') FROM json_tab;
- 最後
いかがでしたでしょうか、実業務中でJSONドキュメントを扱うケースがよくあると思いますので、皆さんのお役に立てば幸いです。