Upload
yugo-shimizu
View
1.123
Download
0
Embed Size (px)
Citation preview
なにがすごいか120億行(414GB)のデータにクエリを投げても5秒(フルスキャン+正規表現によるフィルタ+集計)
データ操作にはSQLが使える
てきとーなSQLを書いても動く(賢いSQLでなくても使える)
JSONを入れられるのでスキーマレスに使える
しかも安い(無料枠もかなりある
time tag message
int string string
[ { "name": "tag", "type": "string" }, { "name": "time", "type": "integer" }, { "name": "message", "type": "string" }]
JSON
use_ite 1434249466 {“count”:”1","uid":"userxxxx","success":"True","event_id":"None","item_id":"12","item_type":"ITEM","user_level":"None","device":"SP_iPhone","id":"xxxxxx"}
use_item 1434249604 {“count”:”1","uid":"userxxxx","success":"True","event_id":"None","item_id":"12","item_type":"ITEM","user_level":"None","device":"SP_iPhone","id":"yyyyy"}
use_item 1434249951 {“count”:”1","uid":"userxxxx","success":"True","event_id":"None","item_id":"12","item_type":"ITEM","user_level":"None","device":"SP_iPhone","id":"zzzzz"}
SELECT JSON_EXTRACT_SCALAR(message, "$.uid") as user_id, JSON_EXTRACT_SCALAR(message, "$.item_id") as item_id, DATE_ADD(STRFTIME_UTC_USEC(time*1000000, "%Y-%m-%d %H:00"), 9, "HOUR") as timestampFROM (TABLE_DATE_RANGE_STRICT( use_item_, DATE_ADD(CURRENT_TIMESTAMP(), -7, "DAY"), DATE_ADD(CURRENT_TIMESTAMP(), -1, "DAY")))
JSON Path風に指定
Datetimeに変換 &TimeZone補正
間近1週間分のTableから取得
クエリ課金の節約術
Tableは日付で分ける
複数TableをつなげてFROMに指定する関数がある
種類ごとにもTableを分ける
同じスキーマで良い。またがって取得したい場合はUNIONなどで繋げられる。
Table分割
BigQueryにはTableあたりのInsert速度の制限がある
別Tableなら問題ない
fluent-plugin-bigqueryはこのTable分割に対応している
InsertにTableがなければ指定したスキーマで自動生成
なにがすごいか120億行(414GB)のデータにクエリを投げても5秒(フルスキャン+正規表現によるフィルタ+集計)
データ操作にはSQLが使える
てきとーなSQLを書いても動く(賢いSQLでなくても使える)
JSONを入れられるのでスキーマレスに使える
しかも安い(無料枠もかなりある
https://github.com/kaizenplatform/fluent-plugin-bigquery/commit/d81e002635797e2b946ee2be151bf029666f320b