BI Engine の概要

BigQuery BI Engine は、頻繁に使用するデータをインテリジェントにキャッシュに保存することで、BigQuery の多くの SQL クエリを加速する高速なメモリ内分析サービスです。データ可視化ツールにより作成されたものを含む任意のソースからの SQL クエリを高速化し、継続的な最適化のためにキャッシュ テーブルを管理します。これにより、手動調整やデータ階層化を行わずに、クエリのパフォーマンスを向上させることができます。テーブルをクラスタ化してパーティショニングすると、大規模なテーブルの BI Engine のパフォーマンスをさらに最適化できます。

たとえば、ダッシュボードに直前の四半期のデータのみを表示する場合は、最新のパーティションのみがメモリに読み込まれるように、テーブルを時間で分割できます。また、マテリアライズド ビューと BI Engine のメリットを組み合わせることもできます。これは、マテリアライズド ビューを使用してデータを結合、フラット化して BI Engine の構造を最適化する場合に特に効果的です。

BI Engine には次の利点があります。

  • BigQuery API との互換性: BI Engine は BigQuery API と直接統合されます。BI ソリューションまたは REST ドライバや JDBC ODBC ドライバなどの標準メカニズムを介して BigQuery API と連携するカスタム アプリケーションは、何の変更もなしで BI Engine を使用できます。
  • ベクトル化されたランタイム: 実行エンジンでベクトル化された処理を使用すると、データのバッチを一度に処理することで、最新の CPU アーキテクチャをより効率的に利用できます。BI Engine はさらに、高度なデータ エンコード(具体的には、辞書のランレングス圧縮)を使用して、メモリ内レイヤに保存されているデータをさらに圧縮します。
  • シームレスな統合: BI Engine は、承認済みビュー、列レベルのセキュリティ、データ マスキングなど、BigQuery 機能やメタデータと連携します。
  • 予約の割り当て: BI Engine の予約では、プロジェクトとリージョンごとにメモリ割り当てが個別に管理されます。BI Engine は、クエリされた列とパーティションの必要な部分のみをキャッシュに保存します。優先テーブルを使用して、BI Engine アクセラレーションを使用するテーブルを指定できます。

ほとんどの組織では、BI Engine は課金管理者によって有効にされ、BI Engine アクセラレーションの容量を予約する必要があります。詳細については、BI Engine の容量を予約するをご覧ください。

BI Engine のユースケース

BI Engine は、BI ダッシュボードに使用されるものを含め、多くの SQL クエリを大幅に加速できます。クエリに必要なテーブルを特定してから優先テーブルとマークする場合、高速化が最も効果的です。BI Engine を使用するには、リージョンに予約を作成し、そのサイズを指定します。BigQuery は、プロジェクトの使用パターンに基づいてキャッシュに保存するテーブルを決定できます。また、テーブルを指定して、他のトラフィックが高速化を妨げないようにすることもできます。

BI Engine は、次のユースケースで役立ちます。

  • BI ツールを使用してデータを分析する: BI Engine は、BigQuery コンソール、Looker Studio や Tableau などの BI ツール、クライアント ライブラリ、API、ODBC コネクタまたは JDBC コネクタのいずれで実行するかに関係なく、BigQuery クエリを高速化します。これにより、組み込みの接続(API)やコネクタを介して BigQuery に接続するダッシュボードのパフォーマンスが大幅に向上します。
  • 頻繁にクエリされるテーブルがある場合: BI Engine では、高速化する優先テーブルを指定できます。これは、最も頻繁に照会されるテーブルのサブセットがある場合や、可視性の高いダッシュボードに使用される場合に便利です。

次のような場合には、BI Engine がニーズに合わない可能性があります。

  • クエリでワイルドカードを使用する: ワイルドカード テーブルを参照するクエリは BI Engine でサポートされておらず、高速化のメリットはありません。
  • BI Engine でサポートされていない BigQuery 機能が必要である: BI Engine はほとんどの SQL 関数と演算子をサポートしていますが、BI Engine でサポートされていない機能には、外部テーブル、行レベルのセキュリティ、SQL 以外のユーザー定義関数などがあります。

BI Engine に関する考慮事項

BI Engine の構成方法を決定する際には、次の点を考慮してください。

特定のクエリの高速化を確認する

クエリセットが高速化されるようにするには、専用の BI Engine 予約を使用して別のプロジェクトを作成します。まず、クエリに必要なコンピューティング容量を見積もり、それらのテーブルを BI Engine の優先テーブルとして指定します。

結合を最小化する

BI Engine は、事前に結合されたか事前に集計されたデータと、結合数が少ないクエリに最適です。これは、小さいディメンション テーブルと結合された大きなファクト テーブルをクエリする場合など、結合の片側が大きくもう一方がはるかに小さい場合に特に当てはまります。BI Engine を、結合を行って単一の大規模なフラット テーブルを生成するマテリアライズド ビューと組み合わせることができます。この場合、クエリごとに同じ結合が実行されることはありません。クエリのパフォーマンスを最適化するには、古いマテリアライズド ビューを使用することをおすすめします。

BI Engine の影響を把握する

BI Engine の使用状況を確認するには、Cloud Monitoring で BI Engine をモニタリングするをご覧ください。または、INFORMATION_SCHEMA.BI_CAPACITIES ビューと INFORMATION_SCHEMA.BI_CAPACITY_CHANGES ビューに対してクエリを実行します。最も正確な比較を行うために、BigQuery の [キャッシュされた結果を使用] オプションを無効にしてください。詳細については、キャッシュに保存されたクエリ結果を使用するをご覧ください。

優先テーブル

BI Engine の優先テーブルを使用すると、BI Engine による高速化を特定のテーブルに限定できます。その他のテーブルに対するクエリには、通常の BigQuery スロットが使用されます。たとえば、優先テーブルを使用すると、ビジネスにとって重要であるとして識別したテーブルとダッシュボードのみを高速化できます。

プロジェクトに、すべての優先テーブルを保持するのに十分な RAM がない場合は、BI Engine が最近アクセスされていないパーティションと列をオフロードします。高速化を必要とする新しいクエリのためにメモリが解放されます。

優先テーブルの制限事項

BI Engine の優先テーブルには次の制限があります。

  • 優先テーブルの予約リストにビューを追加することはできません。BI Engine の優先テーブルは、テーブルのみをサポートします。
  • マテリアライズド ビューへのクエリが加速されるのは、マテリアライズド ビューとそのベーステーブルの両方が優先テーブルリストに含まれている場合のみです。
  • 高速化用のパーティションまたは列の指定はサポートされていません。
  • JSON 型の列はサポートされていないため、BI Engine によって高速化されません。
  • 複数のテーブルにアクセスするクエリが高速化されるのは、すべてのテーブルが優先テーブルである場合のみです。たとえば、JOIN を含むクエリ内のすべてのテーブルは、高速化するために優先テーブルリストに含まれている必要があります。優先リストに含まれていないテーブルが 1 つであっても、クエリで BI Engine を使用することはできません。
  • 一般公開データセットは、Google Cloud コンソールではサポートされていません。一般公開テーブルを優先テーブルとして追加するには、API または DDL を使用します。

割り当てと上限

BI Engine に適用される割り当てと上限については、BigQuery の割り当てと上限をご覧ください。

料金

BI Engine の容量用に作成した予約に対して費用が発生します。BI Engine の料金の詳細については、BigQuery の料金ページをご覧ください。

次のステップ