🌊

BigQuery BI engineを使ってみた

2023/06/05に公開

BI Engineとは

ざっくりいうと、BigQuery側で保持しているBI用のキャッシュのこと
BI用のキャッシュ

BI Engineはどういうときに使う?

考え方としてはBI側のキャッシュとBigQuery側のキャッシュをどのように使い分けるかが重要!

以下のユースケースは個人的にフィットしそうだなと思うケース
・BI側からSQLを発行だけして、BigQueryから結果を返すみたいなBIを使用しているケース
・BIのユーザーは多いけど、ある特定のテーブルへのアクセスが集中しているケース
・とにかくBIダッシュボードをレイテンシーを極力無くして表示させたいケース

BI EngineはBigQueryのどのプランで使用できるのか?

BigQueryのオンデマンド料金
BigQueryのEnterprise Edition

BI Engineの設定の仕方

下の画像のようにBI EngineはBigQueryの設定画面から簡単に設定可能
BigQueryコンソールの左側メニューから「BI Engine」をクリック

下の画像の「予約を作成」をクリック

下の画像のように、リージョンと使用する容量を設定する
容量は250GBまで設定可能
個人的な意見ですが、容量に関してはよく使われるテーブルのデータ量総計に少しバッファーを加えた程度のメモリ量を設定をするのが効果的かと思われます
例えばよく使うテーブルのデータ量が10GBであれば、11〜12GB程度に設定しておくと安心
設定した後に編集することも可能です

リージョンも意外と重要で、同一プロジェクト内でも異なるリージョンでのクエリはキャッシュが効かなくなりますので注意が必要です

右側の料金もメモリの容量に応じて表示してくれるので便利です

(下の画像)よくアクセスされるテーブルを優先テーブルとして設定することができます
もしアクセス頻度の高いテーブルが決まっているならここに指定しましょう

*注意点!逆に一つ優先テーブルを指定すると、それ以外のテーブルにはキャッシュが効かなくなるので、キャッシュを効かせたいテーブルがある場合はすべてここで指定しましょう

確認して送信(削除もすぐにできます)

下の画像のようにBI Engineの予約を作成することができました

BI Engineが得意な処理

クエリのステージ数が少ないほど高速化できる。そのためできるだけデータの前処理はしておきBIからアクセスするデータマートなどを作成してBIからはシンプルなクエリにしてあげるとより効果が出ると思われます。

BI Engineの制約事項

2023年6月2日時点のもの
こちらの制約は頻繁に変更されるため、細かく見たい人は要チェック!
ちなみに外部テーブルにはキャッシュが効かないので注意
サポートされていない機能はこちら

どんなアクセスに対応しているのか?

BI Engineは来たクエリがBIからきたクエリなのかは実は判断していません
BI EngineはBigQuery APIと統合されているので、BI Engineが対応しているSQLであれば実はBI介さなくてもキャッシュが効きます

BI Engineがどれくらい使われているのかを確認するには?

Cloud LoggingからどれくらいBI engineが使用されているのかを確認できるようです。
https://cloud.google.com/bigquery/docs/bi-engine-monitor?hl=ja

もしくは、Information Schemaからも確認できます
INFORMATION_SCHEMA.JOBS_BY_PROJECTのbi_engine-statistics列で確認することができます

SELECT
  creation_time,
  job_id,
  bi_engine_statistics
FROM
  `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
  AND CURRENT_TIMESTAMP()
  AND job_type = "QUERY"

参考URL

Google 公式ブログ
https://cloud.google.com/blog/ja/products/data-analytics/demystifying-bigquery-bi-engine

Discussion