BigQueryのスケジュールされたクエリを使用して分析用のテーブルを作成できるか試す

2023.10.23

BigQueryでは、クエリをスケジュールして定期的に実行することが可能です。

スケジュールされたクエリはcronのようにある時間になったらクエリを自動的に実行したり、一定の間隔でクエリを実行したりすることができます。スケジュールクエリで定期的に実行させて、BigQuery内のテーブルに実行結果をエクスポートすることができます。

分析に使用するデータを作るのに、かなりのテーブルをjoinさせてViewでアクセスしていたのですが、クエリのコストが気になってきたのでこの機能を使って一つのテーブルにエクスポートして試そうと思った次第。

前提

BigQuery Data Transfer Service と 実行するために必要な IAM 権限 を用意する必要があります。

以下のドキュメントを参考にして設定しておきます。

試してみる

クエリ文字列の作成

まずは実行したいクエリ文字列を作成します。

なお、記事内では一般公開データセットを使います。

サンプル) 

SELECT 
  product_name,
  description,
  published_at
FROM `mori-ryosuke.public_data_copy.release_notes` 
where 
  published_at between "2020-01-01" and "2020-01-31"

オンデマンド実行ではエラーとなりますが、スケジュール実行の際は、

@run_time、@run_date というパラメーターを使うことができます。

クエリの実行予定時間をテーブルに保存する時などに使えますね。

利用可能なパラメーター

スケジュール設定

クエリを描いたら

スケジュール をクリックします。

すると上記のように設定項目を記載するフォームが起動します。

[スケジュールされたクエリの名前] に、クエリの名前(My scheduled query など)を入力します。

[繰り返しの頻度] では実行する間隔を選択できます。カスタムでcron形式でもできるようです。

宛先テーブル

クエリの実行結果をエクスポートするテーブルの設定を行います。

※ スケジュールされたクエリの設定時に結果の宛先テーブルが存在しない場合は、BigQuery によってテーブルが作成されます。

データセット、Table IDを入力します。

パーティションの設定もできますので、設定しておきました。

テーブルに追加、上書きのどちらかが選択できるので、用途に応じて選びます。

ここまでできたら保存します。

確認

[スケジュールされたクエリ] のページに行くと、保存したクエリがリストにあることを確認できます。

宛先として設定したテーブルにも実行したクエリの結果が保存されていることを確認できます。

ちゃんと入ってますね。

1日おきに最新のデータをいれたり、全部上書きしていれることもできるので分析のみに使用するテーブルとして利用できそうです。クエリのみで簡易に作成できる点も良き。使わなくなったら消せばいいだけですし。