テストデータ
-----------------------------------------------------------------{
"key1":"sample1",
"key2":2,
"key3":{
"key4":[
{
"key5":"sample5"
},
{
"key5":"sample6"
}
]
}
}
{"key1":"test1","key2":22,"key3":{"key4":[{"key5":"test5"},{"key5":"test6"}]}}
-----------------------------------------------------------------
※JSONが1行毎に複数存在する、ログデータのようなものを想定
テーブル定義
-----------------------------------------------------------------CREATE EXTERNAL TABLE json_table (
raw_data string
)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n'
LOCATION '/data/sample';
-----------------------------------------------------------------
※ログ1行(改行区切り)をStringとして定義
get_json_objectでkey5を取得する場合
hive> SELECT get_json_object(json_table.raw_data, '$.key1'), get_json_object(json_table.raw_data, '$.key2') FROM json_table;
sample1 2
test1 22
⇒取得する項目が少なければ良いが、多いとHQLが見難くなる。sample1 2
test1 22
json_tupleを使うと
hive> SELECT keys.* FROM json_table AS json LATERAL VIEW json_tuple(json.raw_data, 'key1', 'key2') keys as k1, k2;
sample1 2
test1 22
⇒こっちの方が若干見やすい。。。sample1 2
test1 22
※LATERAL VIEWについては、別途説明します。
参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_tuple
0 件のコメント:
コメントを投稿