プレビューになったBigQuery Studio Notebookのスケジュール実行機能を試してみた

BigQueryのNotebookに、スケジュール実行機能がpreviewとして追加されました。面白い機能だと思いましたので実際に触ってみました。
2024.06.14

データアナリティクス事業本部の根本です。新たにBigQuery StudioのNotebookにスケジュール実行できる機能がプレビューとなりました。
June 13, 2024
面白い機能だなと思ったので実際に触ってみて、記事にしてみました。

追加される機能について

概要

BigQuery Notebookを指定した時間と頻度で自動的に実行するようにスケジュールできます。
pythonで実装できDataFrameとしてデータを処理することができるので処理の自由度が高いです。 スケジュールドクエリなどSQLだけでは難しい処理をpythonで実装して日次など決まったタイミングで実行したい場合に役に立つと考えます。

料金

リファレンスではColab Enterprise のランタイム料金が適用されますとの記載がありました。

Colab Enterprise charges for runtimes apply. You are charged for runtime processing based on the E2 machine type. For information about pricing of standard E2 runtimes, see Colab Enterprise pricing.
Colab Enterprise のランタイム料金が適用されます。E2マシンタイプに基づき、ランタイム処理に課金されます。標準E2ランタイムの価格については、Colab Enterpriseの価格をご参照ください。(DeepL翻訳)

引用:https://cloud.google.com/bigquery/docs/manage-notebooks#schedule_notebooks

Notebookのスケジュール作成画面では、ランタイムテンプレートが固定でE2(4vCPUs, 16GB RAM)となっていました。

よってColab Enterpriseのランタイム料金うち以下が発生するものと考えます(asia-northeast1です)。
CPU

Machine type Price per vCPU/hour (USD)
E2 $0.0336317

Memory

Machine type Price per GB hour (USD)
E2 $0.0044869

※2024/6/14時点の情報です

サービスアカウント

Notebookをスケジュールするには、使用するサービスアカウントに以下のロールを付与する必要があります。

  • Notebook Executor User roles/aiplatform.notebookExecutorUser
  • Storage Admin roles/storage.admin
  • Service Account User roles/iam.serviceAccountUser
  • Service Account Token Creator roles/iam.serviceAccountTokenCreator

上記のロールに加えて、実際にBigQueryのデータ操作を行うにはDataformを実行できるサービスアカウントの権限も必要となります。
Dataformサービスアカウントに必要な権限

実際にスケジュールしてみる

実際にNotebookを作成してスケジュール実行までしてみました。

Notebookを作成する

PYTHON ノートブックボタンを押下して新規Notebookを作成します。

import bigframes.pandas as bf
from google.cloud import bigquery
project_id = "プロジェクトID"
bf.options.bigquery.location = "asia-northeast1"
bf.options.bigquery.project = project_id
client = bigquery.Client()
client = bigquery.Client(project=project_id)
df = bf.read_gbq('Insert元データテーブル')
table = client.get_table('Insert対象テーブル')
client.insert_rows(table, df.values.tolist())

作成したスクリプトは、あるテーブルのデータ全件を別テーブルに全件Insertするというシンプルなスクリプトです。
上記スクリプトをNotebookに貼り付けて適当な名前で保存します。

保存できたら、画面上部スケジュールボタンを押下します。

スケジューラの設定画面が出てくるので各種設定をします。

設定できる項目としては以下となります。

設定項目 内容
スケジュール名 スケジュール名
サービスアカウント スケジュール設定したNotebookを実行するサービスアカウント
Cloud Storageバケット 指定したバケットに実行結果のhtmlとNotebookファイルが出力される
スケジュールの頻度 毎日・毎週・毎月・カスタム(cron式)を選択可能
時刻 スケジュール実行される時刻

※ランタイムテンプレートは固定で変更することはできませんでした

スケジュール設定をすると、デプロイ済みスケジュールを見るという表示に変わっています。
スケジュール設定を行なった後に、Notebookに変更を加えた場合にスケジューラ実行に反映するにはNotebookを保存してデプロイをする必要があります。

作成したスケジュールを見てみます。
このように設定した内容を確認することやスケジュールを無効にすることもできます。

スケジュール実行後

作成したスケジュールの画面で過去の実行を表示を押下すると以下のように過去の実行結果を確認することができます。
赤枠の日付の箇所を押下すると、さらに詳細な実行結果を確認できます。

詳細な実行結果確認画面のバケット内のファイルを押下すると、Cloud Storageに出力されたNotebookと実行結果のファイルを確認できます。

  • content.html:Notebook実行結果ファイル
  • content.ipynb:Notebookファイル

まとめ

スケジューラ設定自体はとっても簡単なので、日次でpythonスクリプトでBigQueryに対して処理をしたいという場合には選択肢の一つになってくるものと考えます。
実行されるランタイムがE2(4vCPUs, 16GB RAM)となるのでプチな処理に使うにはもったいなかったりもするかもしれないので、ワークロードやコストも考慮ポイントの一つかなと思いました。GAになるまでに他のランタイムが選べたりするようになるとさらに幅も広がるかなと思います。
この記事がどなたかのお役に立てば嬉しいです。それではまた。