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