Google Cloud Platform IT

【GCP】BigQueryのスケジュールクエリの使い方

2021年7月6日


スケジュールクエリとは、GCPのソリューションであるBigQueryの機能で、
定期的にクエリを実行して、その結果をBigQueryのテーブルに吐き出すことのできる機能です。
 

GCP絡みの開発をする場合、重要な機能なので、簡単に紹介しようと思います。
自分の備忘録も含めて。
 

スケジュールクエリとは

スケジュールクエリとは、BigQueryでcronのようにある時間になったらクエリを自動的に実行したり、1時間ごとにクエリを実行したりすることのできる機能です。
では実行結果はどうなるのかというと、コンソール上で宛先テーブルを指定することができるので、
BigQueryのテーブルにしか吐き出せないです。
 
スケジュールクエリは、BigQueryのコンソール画面から、
以下のような赤枠からスケジュールクエリの設定画面にいくことができます。
 

 

スケジュールクエリの実行期間/間隔の指定

スケジュールクエリの実行期間は以下のものを指定することができます。

項目
定期実行 毎日9:00に実行したい場合は、「繰り返しの頻度:毎日」「開始日と実行時間で実行時間を9:00にする。開始日はなんでもOK」
時間帯 例えば、every 1 hours from 00:45 to 14:45 (UTCで00:45-14:45設定)

 

出力先テーブルについて

スケジュールクエリを設定すると、
もしその出力先のテーブルが存在していない場合は、自動的にテーブルを生成してくれます。
そこで疑問に思うのは、じゃあそのテーブルのスキーマ名やデータ型はどうなるのか?
 

それは、
出力する際のクエリの別名(AS)で出力されます。
スケジュールクエリで、
select CURRENT_TIMESTAMP() as created_atとした場合、出力先のテーブルがない場合は、
スキーマはcreated_atで出力の値はTIMESTAMPなので、TIMESTAMP型で生成されるようになります。

created_atでCURRENT_TIMESTAMP()で作成
前日15:00:00-今日14:59:99までが昨日のデータとしてパーティションを切る
where created_atでDATE型で指定してもその日付のパーティションでデータ取得できる。
 

スケジュールクエリでのみ使用できるパラメータ

スケジュールクエリでのみ使用できるパラメータやシャーディング

定期実行するということは、
例えば毎日1回実行するとかであれば、出力先テーブルで日付でパーティションを切るなどのことをしたいと考えるのが普通かと思います。
スケジュールクエリでは1つのテーブルに吐き出すのではなく、日付パーティションを切ってそれごとに吐き出すみたいなことをすることができます。
 

BigQueryでは、テーブル作成するときに、
テーブル名_20201231
というように指定すると、自動的にシャーディングを切ることができるように、
スケジュールクエリでも宛先テーブル名に上記のような指定をすることで、同様のことができます。
 

上記を実現するためには、スケジュールクエリでしか使用できないパラメータ

  • @run_time
  • @run_date

を使います。
 

table名_{run_date}
table名_{run_time-24h|”%Y%m%d”}
というようにtun_dateやtun_timeといったパラメータを指定することで、
テーブル名に日付パーティションを作成することができます。
 

スケジュールクエリではクエリ実行完了後、通知先としてpubsubのtopicに通知することができます。
これによりpubsubのtopicをトリガーにできる、Cloud Functionsなどで、
クエリ完了後に何らかの処理をpythonやnodejsでしたいなどがあれば、実行させることができたりします。

-Google Cloud Platform, IT
-,

© 2022 Yosshi Blog Powered by AFFINGER5