読者です 読者をやめる 読者になる 読者になる

/var/log/laughingman7743.log

I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?

HiveでネストしたJSONデータのテーブルマッピング

HiveでJSONデータを処理する場合には、json_tuple*1や get_json_object*2を使えば処理できますが、複雑なJSONだとクエリがカオスに。。。json_tupleやget_json_objectでがんばるよりも、struct型やarray型*3を使ったテーブル定義を作ってマッピングしてやると捗ります。

例えば以下のような構造のJSONデータの場合

実際には改行はなく1行のデータで、文字列内の改行は¥nでエスケープされ、gzip等で圧縮されている状態

以下のテーブル定義を作ってやるとうまいことマッピングされます。注意点としてJOSNのキー名がキャメルケースの場合、キー名は全て小文字となるようです。

Hive-JSON-Serde*4を使っていますが、 HCatalogのJSON SerDe(org.apache.hive.hcatalog.data.JsonSerDe)*5でもできます。

struct型の中はドットで簡単に参照できます。

struct型の中のarray型はlateral view*6を使って簡単に展開できます。

Enjoy!