まだご存じの方が少ないかと思いますが、Alibaba Cloud 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ドキュメントを扱うケースがよくあると思いますので、皆さんのお役に立てば幸いです。