唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

BigQueryでテーブルを日付ごとに分ける必要がなくなったり、古いテーブルのストレージ代が安くなったりするらしい

↓の記事にBigQueryの予定している新機能などが書いてあったので個人的に気になったのを紹介
cloud.google.com

テーブルの自動パーティショニング

まだアルファ版らしいけど、テーブルの自動パーティショニングが使えるようになるらしい
BigQueryではクエリの度にテーブルがすべてスキャンされてしまうので、1日ごとなどの適切な粒度でテーブルを分ける必要があった

1つのテーブルに全部の日付分のデータをいれたような巨大なテーブルに何度もクエリを投げると、そのテーブルの大きさに応じて料金が請求されるので下記の記事のようなことになってしまう

たとえば[test.data_20160301], [test.data_20160302]のように日付ごとにテーブルを作ると、TABLE_DATE_RANGE関数を使って以下のようにアクセスできる

SELECT *
FROM TABLE_DATE_RANGE([test.data_], TIMESTAMP('20160301'), TIMESTAMP('20160307'))

公開が予定されている自動パーティショニングはこのような日付ごとのテーブルの分割を自動でやってくれるようになるもの
[test.data]というテーブルで自動パーティショニングを有効にしていれば、以下のような感じで日付を指定してアクセスできるようになるらしい

SELECT *
FROM [test.data]
WHERE _PARTITION_LOAD_TIME BETWEEN TIMESTAMP('20160301') AND TIMESTAMP('20160307')
SELECT *
FROM [test.data$20160301]

データを保存するときに日付ごとに分けずに巨大なテーブルになって大きな課金をされてしまう罠が防げそうでよいけど、障害などで後からログの入れなおしをしたりすることもあるので今までどおり日付ごとにテーブルを作っておいたほうが扱いやすいかも(パーティションを破棄できるようにもなると嬉しいけど

その他

他にもいくつか書いてあるけど気になったのは以下のもの

  • 90日以上更新されてないテーブルの保存に必要な料金が今までの半分になる(2016年5月1日以降から自動で安くなる)
  • ストレージの方式が変わって、クエリによっては今までの10倍以上速くなる
  • bq loadコマンドなどをするときにスキーマを自動で検出できる
  • Web版のテーブル作成のGUIが変わる

追記(2016-07-17)

パーティション機能の挙動について調べました
sucrose.hatenablog.com