BigQueryでクエリのスケジュールを使ってみた

GMOアドマーケティングのT.Oです。

BigQueryの「クエリのスケジュール」機能を使ってみました。この機能を使うとプログラムを書かずにクエリを定期的に実行して、結果をテーブルに書き込むことができるので便利です。ここでは利用手順をご紹介します。

0.前提

クエリのスケジュールを利用するためには、ユーザーに以下の権限が必要です。
*)権限が不足している場合、利用できませんので管理者の方に権限の付与を依頼してください。

bigquery.jobs.createまたはbigquery.transfers.update … 転送を更新するための権限です
bigquery.datasets.update … データセットのメタデータを更新するための権限です

1.クエリの作成

定期実行するためのクエリを「クエリエディタ」に記述します。以下はクエリの例です。
*)「クエリのスケジュール」を実行する前日の日付を取得しています

@run_timeの部分は実行予定時刻をあらわすパラメータとなっています。
他のパラメータとしては@run_dateもあります。概要は以下の表の通りです。
いずれもUTCなので日本標準時(JST)としたい場合には変換が必要です。

パラメータ 標準SQL型 説明
@run_time タイムスタンプ クエリのスケジュールを実行する時刻です。
@run_date 日付 クエリのスケジュールを実行する日付です。

2.クエリのスケジュールの設定

定期実行するためのSQLを記述した状態で、「クエリのスケジュール」を選択し、
メニューから「スケジュールされたクエリを新規作成」を選びます。

*)初回使用時には「アカウントの選択「BigQuery Data Transfer Serivice」に移動」、
「BigQuery Data TransferがGoogleアカウントへのアクセスをリクエストしています」などの画面が
表示されますので許可してください。

「新たにスケジュールされたクエリ」画面が表示されます。以下のように設定します。

設定項目 説明 設定例
詳細とスケジュール
スケジュールされたクエリの名前
クエリの名称を設定します log_date_test
スケジュールオプション繰り返しの頻度 毎時、毎日、毎週など実行頻度を設定します 毎日
開始日と実行時間 開始日、実行時間を設定します 2020/05/27 10:00:00
クエリ結果の書き込み先
プロジェクト名
書き込み先のプロジェクト名を指定します test_project
データセット名 書き込み先のデータセット名を指定します optimize
テーブル名 書き込み先のテーブル名を指定します。
宛先のテーブルをパーティション分割するには以下のようにテンプレート構文と実行予定時刻のパラメータを利用したテーブル名にします。
テーブル名_{run_time|”%Y%m%d”}
log_date_test_{run_time-15h|”%Y%m%d”}

*)実行予定時刻の1日前の日本標準時(JST)としています

宛先テーブルのパーティショニング フィールド 列パーティション分割テーブルにしたい場合にテーブル分割に使用される
TIMESTAMP型の列、あるいはDATE型の列を指定します
指定なし
(テーブル名を取り込み時間でパーティション分割する設定とした場合は指定なしにします)
宛先テーブルの書き込み設定 テーブルに追加する、上書きするかを選択します 「テーブルに上書きする」を選択

3.クエリのスケジュールを実行する

「2.クエリのスケジュールの設定」の手順を終えたら、「新たにスケジュールされたクエリ」画面下部の「スケジュール」を選択してください。

4.スケジュール設定を確認する

「スケジュール」選択したクエリの登録状態を確認するにはBigQuery画面で「スケジュールされたクエリ」を選択します。クエリのスケジュールのリストが表示されます。

5.書き込み結果を確認する

スケジュール設定した日時が経過した後、書き込みの宛先テーブルにデータが出力されているか否かを確認します。今回の設定例の場合、以下のようにデータが出力されていました。

6.まとめ

今回はBigQueryのクエリのスケジュール機能をご紹介しました。設定項目が少し多いような気はしますが、プログラムを作成するよりずっと簡単にテーブル出力ができます。