Edited at

BigqueryのSchedule queryを細々活用している話

この記事はGoogle Cloud Platform その2 Advent Calendar 2018の8日目の投稿です。


はじめに

今年はBigqueryに様々な機能が追加されました。

UIも新しくなり、大きく変わったなぁと今振り返ると感じます。

やはり今年のBQのアップデートの一番の目玉はBQMLかと思いますが、

個人的には痒いところに手が届くSchedule Queryも非常に気に入っています。


Schedule queryとは

クエリを定期実行してくれるBQの機能です。

BQのUI上で完結できるからプログラミングしなくてよくて便利


使い方

※ 旧UIでしか使えません

bq1.png

UIにSchedule Queryというボタンがしれっと追加されてます。

ボタンを押すと下記のような感じ

bq2.png

任意の値を設定してください。

テーブルを指定するときは日付分割テーブルにすることもできます。

その際は、 table_{run_date} と記述すると実行時間で分割してくれます。

書き込みオプションは上書きやアペンドが設定できます。

※オプションでメールはpubsubに転送通知を設定できますがまだα版のようです。

スケジュール設定は下記のような感じです。

bq3.png

任意の頻度、期間が設定できます。

ただし、注意して欲しいのは時間はUTCです。

日本時間で実行したい場合は9時間プラスして設定してください。

定期実行したいクエリはコンソールに書きますが、下記の特殊なパラメータが使えます。

@run_time :実行時間のtimestamp

@run_date :実行時間のdate

こんな感じで書きます。

select 

@run_time as excution_time
from
table

こうするとexcution_timeには実行された時間が値として格納されます。

全て入力したらAddボタンを押してスケジューリング完了です。

登録されたスケジュールはコンソール左上のSchedule Queriesから確認できます。


活用

データレイクチックなテーブルをデイリーでサマってデータマートテーブルを作るみたいに使うのがオーソドックスかな使い方かなと思いますが、私のプロジェクトでの活用方法を1つご紹介します。

◆GA360のログインIDだけを格納するテンプテーブル

GA360のデータを格納するBQからログインIDを出して、それに別テーブルの情報を紐づけて活用することがあります。GA360のデータはかなり量が多く、毎度そのテーブルからログインIDを取ってくるとお金がかかります。そこでSchedule queryでデイリーでログインidと日付を格納するテンプテーブルを作り、そこを参照することによって課金が大幅に下がります。

1発のクエリでこんなに違います(下記はパーティションを12/5に絞った時のデータ量)

・GA360



・テンプテーブル

※ BigQUery Mateを入れるとクエリの金額を表示させることができます

参考:https://qiita.com/amidara/items/a557491615f8e667757c

もちろんschedule queryで取得するさいは7.01GBのスキャンはしますが、その後はテンプテーブルを参照するようにすれば課金額が数百分の一になります。


まとめ

まだベータ版ではありますが、プログラミングせずにバッチ処理のように定期実行できるので重宝する場面は多いと思います。

あまり活用事例を見かけない気がするので、こんな使い方してるよ、というのがあればぜひコメントで教えてください!