by shigemk2

当面は技術的なことしか書かない

はてなカウンターのログをTreasure Dataに突っ込んでみた

はてなカウンターのログをダウンロードする

はてなカウンター→ログ→ログのダウンロード

f:id:shigemk2:20140403000757p:plain

f:id:shigemk2:20140403000729p:plain

ダウンロードできるものはコンマ区切りのCSVファイルです。 こんな感じの。

2014-03-01 00:01:07,xxx.xxx.xxx,https://www.google.co.jp/,"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/xxxx (KHTML, like Gecko) Chrome/xxxx Safari/xxxx","ja,en-US;q=xx,en;q=xx",1680x1050,24,http://shigemk2.hatenablog.com/entry/20120403/1333457575
2014-03-01 00:02:44,xxx.xxx.xxx,https://www.google.co.jp/,"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/xxxx (KHTML, like Gecko) Chrome/xxxx Safari/xxxx","ja,en-US;q=xx,en;q=xx",1680x1050,24,http://shigemk2.hatenablog.com/entry/20120403/1333457575
2014-03-01 00:03:55,xxx.xxx.xxx,https://www.google.co.jp/,"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/xxxx (KHTML, like Gecko) Chrome/xxxx Safari/xxxx","ja,en-US;q=xx,en;q=xx",1680x1050,24,http://shigemk2.hatenablog.com/entry/20120403/1333457575

Treasure DataでインポートできるのはJSONだけみたいなので、 とりあえずCSVファイルをJSONに変換します。

その前に、1列目を

"time","ip","referer","browser","language","device","unknown","url"

にします。こうしないとTreasure DataにインポートできるJSONに変換できないので。 あと、僕はOpenOfficeで全部””でくくりました。

JSONに変換して、ごにょごにょしたJSONファイルを利用してTreasure Dataのテーブルにインポートします。

今回使ったのはcsvjsonです。

$ csvjson -i 0 101-2014-02.csv > shigemk2-3.json

Python製のcsvファイルを処理するためのコマンドラインツール「csvkit」 - brainstorm

で、変換されるのはこんなやつのJSONです。

[
  {
    "language": "ja,en-US;q=xxx,en;q=xxx", 
    "url": "http://shigemk2.hatenablog.com/entry/2013/11/25/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC_squid%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B", 
    "ip": "xxx.xxx.xxx.xx", 
    "unknown": "24", 
    "referer": "http://zenback.itmedia.co.jp/contents/shigemk2.hatenablog.com/entry/2013/11/25/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC_squid%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B", 
    "time": "2014-02-01 00:15:30", 
    "device": "1366x768", 
    "browser": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/xxx (KHTML, like Gecko) Chrome/xxxx Safari/xxx"
  }, 
  {
    "language": "ja,en-US;q=xxx,en;q=xxx", 
    "url": "http://shigemk2.hatenablog.com/entry/20120605/1338832531", 
    "ip": "xxx.xxx.xxx.xx", 
    "unknown": "24", 
    "referer": "https://www.google.co.jp/", 
    "time": "2014-02-01 00:52:35", 
    "device": "1920x1200", 
    "browser": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/xxx (KHTML, like Gecko) Chrome/xxx Safari/xxx"
  }, 
  {
    "language": "ja-JP", 
    "url": "http://shigemk2.hatenablog.com/entry/20120106/1325781987", 
    "ip": "xxx.xxx.xxx.xx", 
    "unknown": "24", 
    "referer": "http://www.bing.com/search", 
    "time": "2014-02-01 00:54:41", 
    "device": "1255x706", 
    "browser": "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/xxx; rv:xxx) like Gecko"
  }, 
]

これでもまだ足りない。この状態でtd table:importをかましてもエラーまみれになる。なので、このJSONを変換する必要がある。

各ノードと各ハッシュの改行を消して、[]を消して、各ノードの,を消して…

みたいな作業をやりつつ、こんな感じのJSONに整える。

{"language": "ja,en-US;q=xxx,en;q=xxx","url": "http://shigemk2.hatenablog.com/entry/2013/11/25/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC_squid%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B","ip": "xxx.xxx.xxx.xx","unknown": "24","referer": "http://zenback.itmedia.co.jp/contents/shigemk2.hatenablog.com/entry/2013/11/25/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC_squid%E3%82%92%E7%AB%8B%E3%81%A6%E3%82%8B","time": "2014-02-01 00:15:30","device": "1366x768","browser": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/xxx (KHTML, like Gecko) Chrome/xxxx Safari/xxx"
}
{"language": "ja,en-US;q=xxx,en;q=xxx","url": "http://shigemk2.hatenablog.com/entry/20120605/1338832531","ip": "xxx.xxx.xxx.xx","unknown": "24","referer": "https://www.google.co.jp/","time": "2014-02-01 00:52:35","device": "1920x1200","browser": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/xxx (KHTML, like Gecko) Chrome/xxx Safari/xxx"
}
{"language": "ja-JP","url": "http://shigemk2.hatenablog.com/entry/20120106/1325781987","ip": "xxx.xxx.xxx.xx","unknown": "24","referer": "http://www.bing.com/search","time": "2014-02-01 00:54:41","device": "1255x706","browser": "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/xxx; rv:xxx) like Gecko"}

これだけやってみて、さあ突っ込んでみよう。

$ td table:create test shigemk2
Table 'test.shigemk2' is created.
$ td table:import test shigemk2 --format json shigemk2-3.json
importing shigemk2-3.json...
  imported 10000 entries from shigemk2-3.json...
  imported 17829 entries from shigemk2-3.json...
  uploading 1051828 bytes...
  imported 20000 entries from shigemk2-3.json...
  imported 30000 entries from shigemk2-3.json...
  imported 35559 entries from shigemk2-3.json...
  uploading 1072781 bytes...
  uploading 141903 bytes...
  imported 37880 entries from shigemk2-3.json.
done.

やったね。 あとはHiveでもなんでも使ってごにょごにょすればいいよ。

こうしてブログにまとめるとすごい面倒だよ。 理想はこれら全部の作業を自動化してくれることだろう。な。