コンテンツに移動
デベロッパー

BI Engine で BigQuery の短いクエリを高速化

2021年4月16日
Google Cloud Japan Team

※この投稿は米国時間 2021 年 4 月 2 日に、Google Cloud blog に投稿されたものの抄訳です。

BigQuery で短いクエリ(インタラクティブなアプリケーションやダッシュボードにデータを入力するなど)を高速化するには、BI Engine を使用するとすばやく簡単にできます。たとえば、The New York Times は BI Engine の SQL インターフェースを使用し、Data Reporting Engine を高速化しています。

クエリの例

説明のために、サイズが 100 MB から 3 GB の複数テーブルに対する代表的なクエリを 3 つ取り上げます。一般的に、BigQuery の基準ではこれらのテーブルは小型の範疇に入ります。BigQuery はカラム型データベースであるため、クエリが読み取る必要のある列のサイズのみをお伝えします。

最初のクエリでは、約 400 MB のデータを処理してメディケア請求の平均費用を割り出します。

読み込んでいます...

2 番目のクエリでは、大きめのテーブル(3 GB)を処理して、シカゴ内のあるタクシーの平均チップ額を支払い方法別に割り出します。

読み込んでいます...

3 番目のクエリでは、小さめのテーブル(100 MB)を処理して、特に汚染された場所を見つけます。

読み込んでいます...

クエリのパフォーマンスを測定する

クエリのパフォーマンスを測定するために、あえてキャッシュをオフにして任意のクエリを 5 回実行します。

読み込んでいます...

このコードは、消費されたリソースの合計(スロットミリ秒)とサーバーでのクエリにかかった合計時間を出力します。

定額料金を使用している場合(ほとんどの企業のお客様が該当します)、スロットミリ秒はスロットが使用されている時間を反映します。したがって、この値はクエリのコストを反映したものとなります。

経過時間は結果の計算に費やされた時間です。server_time はリクエストの処理にかかる時間です(ネットワーク ラウンドトリップ時間は BI Engine の使用有無に関係なく同じになるため測定しません)。

まず BI Engine を使用せずに 3 つのクエリを実行しました(GitHub のノートブックをご覧ください)。

BI Engine を予約する

次に、BigQuery ウェブ コンソールにアクセスして、10 GB の BI Engine の予約を作成しました(月額料金: $300)。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-30_at_12.05.17_PM.max-30.max-300x300.png

10 GB を選んだ理由

BI Engine が小さなテーブルのクエリを高速化する重要な方法として、テーブルをメモリにキャッシュすることが挙げられます。他の高速化も行いますが、これが主な方法です。したがって、クエリを実行するテーブルを余裕をもって保持するのに十分なメモリを確保する必要があります。BI Engine は使用環境に合わせて自動的にメモリを管理します。

今回はシカゴのタクシーのクエリで 3 GB を処理するため、メモリは 10 GB としました。他の 2 つのクエリについては 1 GB あれば十分だったはずです。メモリは最大 100 GB まで増やせます。100 GB の使用は、小さなテーブルに対して多数のクエリを同時に実行する場合におすすめします。BI Engine は圧縮データを保存するため、小さな容量でうまくいく可能性がありますが、余裕を確保したほうが良いでしょう。

Reservations API を使用するとスクリプトから BI Engine を有効にできます。ただし、メモリが利用可能になるまでに数分かかるため、クエリベースではなく、少なくとも数時間の枠で考える必要があります。

BI Engine を有効にする

BI Engine を使用した場合と使用しない場合の 3 つのクエリの比較は次のとおりです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-30_at_12.06.08_PM.max-80.max-800x800.png

ご覧のとおり、費用効率は 8~20 倍、時間効率は約 2 倍となりました。

定額料金の予約を購入すると、BI Engine の一部の容量が追加料金なしで含まれます。たとえば、1,000 スロットの年定額契約コミットメントで 50 GB の BI Engine が無料で含まれます。BI Engine の追加容量は月額 $30~$300 なので、BigQuery の予約をさらに進め、高速化するための非常に費用効果の高い方法です。

ぜひお試しください。

次のステップ

  1. 実際に試してみてください。コードは GitHub にあります

  2. BI Engine の詳細とプレビュー版への登録方法については、こちらのブログ投稿をご覧ください。

  3. BigQuery Client API で query() メソッドを使用している場合は、アプリケーションを完全に高速化できます(insertJob() メソッドも高速化されますが、それほどではありません)。お使いのコードをご確認ください。

  4. BigQuery の詳細については、私の著書をお読みください

注: 現時点(2021 年 4 月)では、BI Engine の SQL インターフェースはプレビュー版です。アカウントで有効にするには、こちらの登録フォームをご利用ください。有益な話し合いに応じてくれた Mosha Pasumansky 氏と BI Engine チームに感謝いたします。

-Google Cloud 分析および AI ソリューション部門責任者 Lak Lakshmanan

投稿先