EMRで利用する際のログについて

nginxのltsv形式のアクセスログをfluentd経由でS3に保存すると、type fileで出力したものと同じで、以下のようなフォーマットとなる。

日付 タグ jsonフォーマットのデータ

実際にはgzに圧縮されて。

S3のデータをインプットにEMR(hive)で計算しようにも使いづらい印象。
というのは、いろんなサイトで見かけるサンプルはたいていtsv形式のものをS3に保存してあって、それをインプットに計算するというものが多いからだ。

・・・うーん、うーん、と困って色々見ていたところ、以下のサイトを発見し、このフォーマットでも問題ないことが分かった。

http://memocra.blogspot.jp/2012/12/emr.html

LATERAL VIEW json_tuple関数で、JSONをパース分割すると通常のカラムとしてSELECTできます。

具体的には以下のような感じ。

SELECT
 dt,host,user,method,path,code,size,referer,agent
FROM
 fluentLog LATERAL VIEW json_tuple(fluentLog.json, 'host', 'user', 'method', 'path', 'code', 'size', 'referer', 'agent') j
 AS host,user,method, path, code, size, referer, agent

※fluentLogは事前に定義済み

これこれ!
これが知りたかったんです。すっきりしました。

あとこちらも参考にさせていただきました:http://takemikami.com/technote/archives/877