普段Google BigQueryでは簡単な集計SQLしか使っていないのですが、集計SQL以外にも色々便利な機能があります。
ただ、使用頻度が高くないので、いざ使おうとするとマニュアルを探すところから始まるので、自分用に簡単な使い方をまとめておこうと思います。
ここではスケジュールされたクエリをまとめました。
「BigQueryの少し凝った使い方メモ」記事一覧
- BigQueryの少し凝った使い方メモ(ビュー・マテリアライズドビュー・テーブル関数)
- BigQueryの少し凝った使い方メモ(テーブル作成・データ更新)
- BigQueryの少し凝った使い方メモ(スケジュールされたクエリ)
- BigQueryの少し凝った使い方メモ(プログラミング)
- BigQueryの少し凝った使い方メモ(etc)
スケジュールされたクエリ
- 指定した日時に、指定したクエリを実行して、指定したテーブルに書き込んでくれる
- 実行された日時をパラメータでクエリに渡すことができる
- 過去に遡って実行できる
- 他のスケジュールされたクエリをシーケンシャルに呼び出すことはできない
- パイプラインが作れない
- 実行時間のパラメータはコンソールでは使用できない
- コンソールでクエリの動作確認ができない
例
- 実行時のパラメータ
@run_time
実行時時刻(UTC)@run_date
実行時日付(UTC)- ローカルタイムで作業するなら使用することはほとんどない
SELECT @run_time AS query_run_time_utc, @run_date AS query_run_date_utc
読み込み時間テーブルへの書き込み
- テーブル末に
${run_time|"%Y%m%d"}
を付けると実行日パーティションに書き込まれる
例
- JSTの昨日のパーティションに書き込む
- +9(JST) - 24(昨日) = -15
- 「実行日時-15時間」の日付パーティションに書き込む
table_name${run_time-15h|"%Y%m%d"}
- +9(JST) - 24(昨日) = -15
- テーブルを上書きにする
パーティションテーブルへの書き込み
- パーティショニングフィールドを指定する
- テーブルを上書きにする
その他
- 他のスケジュールされたクエリをシーケンシャルに呼び出すことはできない
- パイプラインが作れない
- 実行時間のパラメータはコンソールでは使用できない
- コンソールでクエリの動作確認ができない
これらの仕様のため、あまり使い勝手はよくない。
シーケンシャル実行の代案として、同等の「クエリ実行・テーブル書き込み」を行うクエリを用意し、時間を引数に取るストアドプロシージャからクエリを呼ぶようにする。そして、スケジュールされたクエリからは、@run_time
を引数に渡してストアドプロシージャを呼ぶようにする。