BI Engine とは

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

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

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

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

BI Engine SQL インターフェースについて

今回のリリースにより、BI Engine SQL インターフェースは BI Engine を拡張して、Looker、Tableau、Power BI、カスタム アプリケーションなどの他のビジネス インテリジェンス(BI)ツールに統合されるため、データ探索や分析がスピードアップします。このページでは、BI Engine SQL インターフェースの概要と、BI Engine で使用できる拡張機能について説明します。

BI Engine のアーキテクチャ

BI Engine のユースケース

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

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

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

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

  • クエリでワイルドカードを使用する: ワイルドカード テーブルを参照するクエリは BI Engine でサポートされておらず、高速化のメリットはありません。

  • BI Engine でサポートされていない BigQuery 機能に大きくに依存している: BI Engine では、ビジネス インテリジェンス(BI)ツールを BigQuery に接続するときにはほとんどの SQL 関数と演算子がサポートされますが、外部テーブルや SQL 以外のユーザー定義関数など、サポートされていない機能があります。

BI Engine に関する考慮事項

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 の料金の詳細については、BigQuery の料金ページをご覧ください。

次のステップ