BigQuery BI Engineについての調査メモ
BigQuery BI Engineを検証する機会がありましたのでその時の調査を備忘録として残しました。
BigQuery BI Engine とは?
BigQuery BI Engine は、高速なメモリ内分析サービスです。
BI Engine を使用すると、BigQuery に保存されたデータを分析できます。
クエリ応答時間は 1 秒未満で、同時実行性にも優れています。BI Engine は、Google データポータルなどの使い慣れた Google ツールと統合されています。BI Engine SQL インターフェース機能は、Looker、Tableau、Power BI、カスタム アプリケーションなどの一般的なビジネス インテリジェンス(BI)ツールとも統合されており、データ探索と分析を高速化できます。
BI Engine を使用すると、パフォーマンス、スケーリング、セキュリティ、データの鮮度を損なうことなく、高機能かつインタラクティブなダッシュボードとレポートを作成できます。
何をインメモリに保存しているのか?
テーブルデータを保存しています。
有効の単位はプロジェクトですので、有効にしたプロジェクトにあるデータセット並びにその配下のテーブル全て保存の対象のようです。
また、メモリに格納するテーブルデータはクエリに応じてよしなに采配されるようですので、全テーブルのうち、データがよく使われるテーブルのデータ量総計に応じたメモリ量の設定をするのが効果的だそうです。(中の人から聞いた情報)
BI Engine は、BigQuery メタデータとテーブルデータをメモリに保存します。データの保存量は、購入する容量によって制限されます。
BI Engine に保存されたデータから結果を取得するクエリを実行する場合、データの読み取りについては課金されません。
BI Engine の容量を超えるクエリ結果を生成するクエリを実行すると、BI Engine の自己調整機能が BigQuery スロットを使用してクエリを実行します。
クエリの実行に BigQuery のスロットが使用された場合は、クエリジョブの BigQuery オンデマンド クエリ料金に基づいて課金されます。
また、BigQuery のクエリジョブに対する割り当てと上限がすべて適用されます。
内部アーキテクチャ
知らなくてもそこまで困らないですが、知っておいて損はない程度の話
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 は分散型インメモリ実行エンジンで、大幅に大きなメモリ予約を割り当てることができます。
最適化される関数
どうやらBI Engineには特定の関数のみ最適化の対応となっているようですので、レイテンシを求めるのであれば以下のリンク先にある関数を使うのがベターなようです
BigQuery BI Engine は、カスタムクエリまたはビューを使用して、ビジネス インテリジェンス(BI)ツールを BigQuery に接続するときに、次の標準 SQL 関数と演算子を最適化します。このリストにない関数と演算子を使用するクエリは、実行速度が遅くなる可能性があります。
Discussion