0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

BigQueryのスケジュールされたクエリを試してみる

Posted at

やりたいこと

クエリを定期実行したい場面がありました。Pythonプログラム内でbqコマンドを実行しようかと思ってたとき、BigQueryコンソールを眺めていると「スケジュール」という文字が…これを使えば、BigQueryで完結するのでは。
業務で使ったことが無かったので、試してみます。

手順

今回はサンプルデータの「word」カラムからランダムに100個値を取り出すクエリを、スケジューリングさせることにします。

SELECT word, rand() AS random
FROM `publicdata.samples.shakespeare` AS shakespeare
ORDER BY random
LIMIT 100

クエリを入力したら「スケジュール」->「スケジュールされたクエリを有効にする」を押します。
image.png

「APIを有効にする」を押します。
image.png

しばらくしてページを更新し再度「スケジュール」を押すと「スケジュールされたクエリを新規作成」が選べるようになっているので押します。

image.png

スケジュールの設定画面が開きます。

image.png

image.png

詳細とスケジュール

「スケジュールされたクエリの名前」
このスケジュールの名称を設定します。

スケジュールオプション

「繰り返しの頻度」
毎時、毎日、毎週、毎月、カスタム、オンデマンド から選べます。

カスタムとすると、頻度を入力するテキストボックスが出てくるのですが、どのように設定するのか公式ドキュメントで調べてみました。

公式ドキュメントより引用↓

頻度を変更するには、[繰り返し] オプションを [毎日] から目的の頻度に変更します。
カスタム頻度を指定するには、[カスタム] を選択し、[カスタム スケジュール] に Cron と同様の時間指定を入力します(例: every 3 hours)。
最短許容時間は 15 分です。
有効な値の説明については、TransferConfig の schedule フィールドをご覧ください。

TransferConfigの公式ドキュメントより引用↓

時刻は UTC で指定します。
有効な形式の例: 1st,3rd monday of month 15:30、every wed,fri of jan,jun 13:15、first sunday of quarter 00:00。
形式の詳細については、https://cloud.google.com/appengine/docs/flexible/python/scheduling-jobs-with-cron-yaml#the_schedule_format をご覧ください。

https://cloud.google.com/appengine/docs/flexible/python/scheduling-jobs-with-cron-yaml#the_schedule_format
の「カスタムの間隔」が参考になりそうです。

今回は、毎時で設定したいので素直に「毎時」を選べばいいのですが、
なんとなく「カスタム」のほうで「every 1 hours」を設定してみました。

「開始時刻をスケジュール」を選択すると「開始日と実行時間」が、
「終了時刻を設定」を選択すると「終了日」が、
設定できるようになります。
軽いクエリいえど毎時ずっと実行されるのもあれなので、今回は終了時刻を設けました。

クエリ結果の書き込み先

「データセット名」「テーブル名」
事前に、書き込み先のテーブルを作っておきました。
今回は「sample」データセットに「schedule_sample」テーブルを作成しました。ちなみにこちらのテーブルは、取り込み時間で分割されたテーブル(1日)となっています。

「宛先テーブルの書き込み設定」
追加か上書きかを選択します。

設定が一通り終了したら「スケジュール」を押します。
初回は「BigQuery Data Transfer Service」を許可するかどうかのポップアップが出ますので、許可してあげます。

「スケジュールされたクエリ」を開くと、先程設定したクエリが登録されているのが確認できました。

image.png

次回のスケジュールは、日本時間の「2021/12/29 10:22:00」となっています。
開始時刻を「2021/12/29 09:22:00」、間隔を「every 1 hours」に設定したので、開始時刻の次の1時間目から定期実行となるのですね。

実行の時を座して待ちます。

さて、10:22を過ぎました。再度「スケジュールされたクエリ」一覧を見てみると…
image.png
ステータスが緑になり、次回のスケジュールも日本時間の「2021/12/29 11:22:00」と1時間進んでいますね。

表示名を押し実行履歴を見てみると…
image.png

10:22に、問題なく実行されています。

image.png

テーブルの今日のパーティションにも、問題なく値が入っていました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?