BI Engine SQL インターフェースの概要
BI Engine SQL インターフェースについて
BigQuery BI Engine は、BigQuery に保存されているデータを分析できる、高速なメモリ内分析サービスです。クエリ応答時間は 1 秒未満で、同時実行性にも優れています。
BI Engine SQL インターフェースは BI Engine を拡張して、Looker、Tableau、Power BI、カスタム アプリケーションなどの他のビジネス インテリジェンス(BI)ツールに統合されるため、データ探索や分析がスピードアップします。このページでは、BI Engine SQL インターフェースの概要と、BI Engine で使用できる拡張機能について説明します。
予約サイズを増やす
デフォルトのサイズ(250 GB)を超える追加のメモリ予約が必要な場合は、増加をリクエストできます。予約の増加はほとんどのリージョンで利用でき、処理に 3 日から 1 週間かかる場合があります。
BI Engine のアーキテクチャ
BI Engine SQL インターフェースは、Google データポータル用の既存の BI Engine アーキテクチャを基盤としています。次の図は、BI Engine の更新されたアーキテクチャを示しています。
BI Engine は以下の内容をサポートしています。
- BigQuery API: BI Engine は BigQuery API と直接統合されます。BI ソリューションまたは REST ドライバや JDBC ODBC ドライバなどの標準メカニズムを介して BigQuery API と連携するカスタム アプリケーションは、何の変更もなしで BI Engine を使用できます。
- ベクトル化ランタイム: BI Engine SQL インターフェースでは、BI Engine はベクトル処理と呼ばれる最新の手法を採用しています。実行エンジンでベクトル化された処理を使用すると、データのバッチを一度に処理することで、最新の CPU アーキテクチャをより効率的に利用できます。BI Engine はさらに、高度なデータ エンコード(具体的には、辞書のランレングス圧縮)を使用して、メモリ内レイヤに保存されているデータをさらに圧縮します。
- メタデータ: メタデータには、テーブルとビューの定義、スキーマ定義、詳細な権限が含まれます。
- 予約: BI Engine の予約では、プロジェクト請求レベルでメモリ割り当てを管理します。BI Engine は、クエリまたはスキャンされた列とパーティションのみをキャッシュに保存します。テーブル全体をキャッシュに保存するわけではありません。
- 分散型インメモリ エンジン: BI Engine は分散型インメモリ実行エンジンで、大幅に大きなメモリ予約を割り当てることができます。
クエリの最適化と高速化
BigQuery と拡張 BI Engine では、SQL クエリ用に生成されたクエリプランがサブクエリに分割されます。サブクエリには、データのスキャン、フィルタリング、集計などのさまざまなオペレーションが含まれ、多くの場合、シャードでの実行単位になります。
BigQuery でサポートされている SQL クエリはすべて BI Engine SQL インターフェースによって正しく実行されますが、特定のサブクエリのみが最適化されます。特に BI Engine SQL インターフェースは、ストレージからデータをスキャンし、フィルタ、コンピューティング、集計、並べ替え、特定の種類の結合などのオペレーションを実行するリーフレベルのサブクエリに最も最適化されています。BI Engine によってまだ完全に高速化されてないその他のサブクエリは、実行のために BigQuery に戻されます。
このように選択的に最適化することで、実行時間の大部分が元データを処理するリーフレベルのサブクエリに費やされるため、より簡単なビジネス インテリジェンスまたはダッシュボード タイプのクエリ(サブクエリの数が少なくなる)は BI Engine で最も効果があります。
制限事項
次のリストでは、BI Engine を使用する際に、クエリの高速化がいつどのように行われるかについて説明しています。
- リーフレベルのサブクエリ内では、高速化は標準 SQL 関数と演算子に制限されます。
- 行数と行数には次の制限があります。
- 1 つのテーブルのみを参照する単純なクエリ(
GROUP-BY
クエリやFILTER
クエリなど)は、主に予約サイズによって制限されます。 - 結合では、高速化は
INNER
結合とLEFT OUTER
結合によるリーフレベルのサブクエリに制限されます。ここで、大きな(ファクト)テーブルは、最大 4 つの小さく、パーティション分割されていない(ディメンション)テーブルと結合されます。各テーブルは参照される列ごとに最大 500 万行または 5 GB のサイズがあります。
- 1 つのテーブルのみを参照する単純なクエリ(
- ワイルドカード テーブルを参照するクエリはサポートされていません。
モニタリングと診断
このセクションでは、BI Engine についての統計情報を取得する方法と、BI Engine が Cloud Monitoring と統合される方法について説明します。
高速化の統計情報
BI Engine に関する詳細な統計情報は、Job Statistics API を使用して確認できます。bq
コマンドライン ツールを使用して、BI Engine 高速化クエリに関連する統計情報をフェッチできます。
BI Engine アクセラレーションが有効化されると、次の 3 つのモードのいずれかでクエリを実行できます。
DISABLED |
BI Engine はアクセラレーションを無効にしました。biEngineReasons は、より詳細な理由を指定します。クエリは BigQuery 実行エンジンを使用して実行されました。 |
PARTIAL |
クエリの一部は BI Engine を使用して高速化されました。クエリの最適化と高速化で説明されているように、一般にクエリプランは複数のサブクエリに分割されます。BI Engine は、ダッシュボードで通常使用される一般的なタイプのサブクエリ パターンをサポートしています。クエリが複数のサブクエリで構成されている場合、サポートされるユースケースであるのはごく一部で、BI Engine は通常の BigQuery エンジンを使用して残りのサブクエリを実行します。残りのサブクエリは、BI Engine アクセラレーションを受け取りません。この場合、BI Engine は PARTIAL アクセラレーション コードを返し、biEngineReasons を使用して他のサブクエリを高速化させない理由を代入します。 |
FULL |
クエリの全体は BI Engine を使用して高速化されました。 |
BI Engine で高速化されたクエリに関連付けられている統計情報を取得するには、次の bq
コマンドライン ツール コマンドを実行します。
bq show --format=prettyjson -j job_id
プロジェクトで BI Engine アクセラレーションが有効になっている場合、出力には新しいフィールド biEngineStatistics
が生成されます。ジョブレポートの例を以下に示します。
"statistics": {
"creationTime": "1602175128902",
"endTime": "1602175130700",
"query": {
"biEngineStatistics": {
"biEngineMode": "DISABLED",
"biEngineReasons": [
{
"code": "UNSUPPORTED_SQL_TEXT",
"message": "Detected unsupported join type"
}
]
},
BiEngineStatistics
フィールドの詳細については、ジョブ参照をご覧ください。
INFORMATION_SCHEMA の加速統計情報
BI Engine アクセラレーシタの統計情報は、INFORMATION_SCHEMA.JOBS_BY_*
ビューの一部として、bi_engine_statistics
列を介してクエリできます。たとえば、このクエリは、過去 24 時間のすべてのプロジェクトのジョブに関する 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"
INFORMATION_SCHEMA ビューで project-id
、region
、views
のリージョナリティを指定するには、次の形式を使用します。
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
Cloud Monitoring
BI Engine は Cloud Monitoring と統合され、モニタリングやアラート目的に使用される重要な指標を表示します。モニタリング対象の指標は次のとおりです。
リソースの種類 | 指標名 | 説明 |
---|---|---|
プロジェクト | 予約合計バイト数 | 1 つの Cloud プロジェクトに割り当てられた合計容量。 |
プロジェクト | 予約使用バイト数 | 1 つの Cloud プロジェクトで使用される合計容量。 |
料金
BI Engine の料金は、BI Engine の料金ページで説明しています。
サポートされるリージョン
BigQuery と同様に、BI Engine はリージョン リソースであり、マルチリージョン リソースです。 BI Engine では、BigQuery 内のデータがあるのと同じリージョンでデータが処理されます。BigQuery BI Engine SQL インターフェースは、BigQuery と同じリージョンでサポートされます。BigQuery のリージョンのロケーションについて詳しくは、BigQuery データセットのロケーションをご覧ください。