BI Engine による BigQuery クエリのパフォーマンスの強化方法

Google Cloud Japan Team
※この投稿は米国時間 2022 年 6 月 25 日に、Google Cloud blog に投稿されたものの抄訳です。
BigQuery BI Engine は、BigQuery に直接組み込まれた高速のメモリ分析サービスです。ユーザーは BigQuery に保存されているデータを短い応答時間と高い同時実行性で分析して、特定の BigQuery SQL クエリを加速できるようになります。BI Engine は、クエリ結果の代わりにデータをキャッシュに保存するため、データのさまざまな側面を確認するときに、同じデータの異なるクエリが高速化されます。BI Engine を BigQuery ストリーミングで使用することにより、書き込み速度やデータの更新頻度を損なうことなく、ストリーミング データをリアルタイムでデータ分析できます。
BI Engine のアーキテクチャ
BI Engine SQL インターフェースにより、BI Engine のサポートが、Looker、Tableau、Power BI、カスタム アプリケーションなどの BigQuery と連携して、データ探索と分析を高速化するビジネス インテリジェンス(BI)ツールに拡張されます。BI Engine を使用すると、パフォーマンス、スケール、セキュリティ、またはデータの更新頻度を損なうことなく、高機能かつインタラクティブなダッシュボードとレポートを好きな BI ツールで作成できます。BI Engine SQL インターフェースについての詳細は、こちらをご参照ください。
次の図は、BI Engine の更新されたアーキテクチャを示しています。


ここで示されているのは、BI Engine の容量の予約を使用して作成された Looker ダッシュボード(上)と予約なしの同じダッシュボード(下)の簡単な例です。このダッシュボードは、BigQuery の一般公開データセット「bigquery-public-data.chicago_taxi_trips」から作成され、 total_trip コストの総計と、total_trip コストの対数平均を経時的に分析しています。


過去 5 年間の total_trip コスト
BI Engine は、クエリを解決して、予約の容量を最大化できるだけの最小量のデータをキャッシュに保存します。ビッグデータでビジネス インテリジェンスを実行することは、一筋縄ではいかない場合があります。

これは、同じ一般公開データセット、「bigquery-public-data.chicago_taxi_trips.taxi_trips」に対するクエリで、予約済みの BigQuery スロットがある場合とない場合の BI Engine のパフォーマンスを示しています。
クエリの例
上記のクエリは、次の組み合わせで実行されました。
BigQuery スロット予約 / BI Engine 予約がない場合、そのクエリでは、予約ありの実行と比較して、平均スロットが 7.6 倍、ジョブのランタイムが 6.3 倍、増加しました(結果の最終統計)。
BI Engine 予約がなしで、BigQuery スロット予約がある場合、のクエリでは、予約がある場合の実行と比較して、平均スロットが 6.9 倍、ジョブのランタイムが 5.9 倍、増加しました(結果の最終統計)。
BI エンジンの予約があり、BigQuery スロットの予約がない場合、そのクエリでは、平均スロットが 1.5 増え、ジョブは 1 秒以内(868 ミリ秒)で完了しました。
BI Engine 予約と BigQuery スロット予約の両方がある場合、平均 23 のスロットのみが使用され、結果に示されているように、ジョブは 1 秒以内に完了しました。これは、平均スロットとランタイムにおいて、他のすべてのオプションと比較して、最も費用体効果に優れています(平均スロットが 23.27、ランタイムが 855 ミリ秒)。


INFORMATION_SCHEMA は、データセット、ルーティン、テーブル、ビュー、ジョブ、予約、ストリーミング データに関するメタデータへのアクセスを可能にする一連のビューです。INFORMATION_SCHEMA.JOBS_BY_* ビューをクエリすると、BigQuery ジョブに関するリアルタイムのメタデータを取得できます。このビューには、現在実行中のジョブと、過去 180 日間に完了したジョブの履歴が含まれます。
bi_engine_statistics とスロット数を決定するためのクエリです。スキーマについての詳細情報は、こちらでご確認いただけます。
このモニタリングから、BI クエリのパフォーマンスを改善する最も効果的な方法は、BigQuery スロット予約とともに BI ENGINE 予約を使用することです。クエリのパフォーマンスとスループットが向上し、使用するスロット数も少なくなります。BI Engine の容量を予約すると、プロジェクトのスロットを節約できます。
BigQuery BI Engine は、ビジネス インテリジェンス(BI)ツールを BigQuery に接続するときに、標準 SQL 関数と演算子を最適化します。BI Engine の最適化される SQL 関数と演算子は、こちらでご確認いただけます。
Cloud Monitoring で BI Engine をモニタリングする
BigQuery BI Engine は Cloud Monitoring と統合されているため、BI Engine の指標をモニタリングしてアラートを構成できます。
Monitoring を使用して BI Engine の指標のグラフを作成する方法については、Monitoring ドキュメントのグラフの作成をご覧ください。

BI Engine の予約なしで同じクエリを実行したところ、15.47 GB が処理されたことがわかりました。


BI Engine の容量の予約後、[BIE Reservation Used Bytes] ダッシュボードの [Monitoring] で、圧縮率が約 11.74 倍(15.47 GB / 1.317 MB)になりました。ただし、圧縮はデータに大きく依存します。主に圧縮はデータのカーディナリティに依存します。お客様は、データにテストを実行して、圧縮率を決定する必要があります。


モニタリング指標の「Reservation Total Bytes」は、BI Engine の容量の予約に関する情報を提供し、「Reservation Used Bytes」は、used_bytes の合計に関する情報を提供します。お客様は、この 2 つの指標を活用して、予約に適した容量を導きだせます。
プロジェクトに BI Engine の容量が予約されている場合、BigQuery で実行されているクエリは、BI Engine を使用して、互換性のあるサブクエリのパフォーマンスを高速化します。クエリの高速化のレベルは、次のいずれかのモードにあたります。
BI Engine Mode FULL - BI Engine コンピューティングが使用され、クエリのリーフステージが加速します。ただし、必要なデータがメモリ内にあるか、ディスクからスキャンする必要がある場合があります。BI Engine コンピューティングが使用されている場合でも、BQ スロットがクエリの一部に使用されていることもあります。クエリが複雑になるほど、より多くのスロットが使用されます。このモードでは、BI Engine すべてのリーフステージ(さらに場合によってはすべてのステージ)が実行されます。
BI Engine Mode PARTIAL - BI Engine は、互換性のあるサブクエリを高速化し、BigQuery は BI Engine と互換性のないサブクエリを処理します。また、このモードにより BI Engine モードをフルに使用していない理由(bi-engine-reason)も提供されます。BI Engine でリーフステージの一部と BigQuery でその残りのステージが実行されます。
BI Engine Mode DISABLED - BI Engine は、高速化と互換性のないサブクエリを処理する場合、すべてのリーフステージが BigQuery で処理されます。このモードにより BI Engine モードをフルまたは部分的に使用していない理由(bi-engine-reason)も提供されます。

定額料金の予約を購入いただいた場合、BI Engine の容量(GB)が、月額定額料金の一部として提供されることにご注意ください。2,000 スロットの年契約コミットメントでは、最大 100 GB の BI Engine の容量を無料で利用できます。BI Engine は、BI クエリに対して処理されるスロット数を減らすため、自由に使用できる容量に加えて、BI Engine の容量を少し補充し、購入するスロット数を減らすことで、使うスロット数をさらに増やさずに要件を満たせる場合があります。

参考資料
bi-engine-intro(BigQuery BI Engine とは)
bi-engine-reserve-capacity(BI Engine の容量の予約)
streaming-api(BigQuery Storage Write API を使用してバッチとストリーミングを実行する)
bi-engine-sql-interface-overview(BI Engine SQL インターフェースの概要)
bi-engine-pricing(BigQuery BI Engine の料金)
bi-engine-sql-interface-overview(BI Engine SQL インターフェースの概要)
BI Engine と BigQuery が企業にどう役立つかについての詳細は、リストのクイックスタート ページをご利用ください。
bi-engine-data-studio(データポータルを使用したクイックスタート)
bi-engine-looker(BI Engine と Looker を使用して BigQuery データを分析する)
Google、データ分析担当カスタマー エンジニア Layo Jesudhass