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

BigQuery の費用を管理する

2022年8月22日
Google Cloud Japan Team

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

複数のプロジェクトで BigQuery の費用を管理することについて、頭を悩ませていませんか?このブログでは、BigQuery の費用を制限するための機能と、消費のモニタリングについてご紹介します。また、費用を管理しながらシームレスにスケーリングできるウェアハウスを設計する方法についてもご紹介します。

1. ユーザーレベルの割り当てとプロジェクト レベルの割り当てを設定することで、使用量を制限する

複数の BigQuery プロジェクトとユーザーが存在している場合は、カスタム割り当てを要求することで費用を管理できます。この割り当てでは、1 日に処理されるクエリデータ量の上限を指定します。クエリデータに対してカスタム割り当てを作成すると、プロジェクト レベルまたはユーザーレベルで費用を管理できます。

  • プロジェクト レベルのカスタム割り当ては、そのプロジェクト内のすべてのユーザーの合計使用量を制限します。

  • ユーザーレベルのカスタム割り当ては、プロジェクト内のすべてのユーザーとサービス アカウントに個別に適用されます。

特定のユーザーまたはサービス アカウントにカスタム割り当てを行うことはできません。

ベスト プラクティス: 1 日に処理される最大データ量に基づいてカスタムの費用管理を作成します。数 GB といった小規模から始めます。制限量は必要に応じて増やすことができます。

設定手順: カスタムコスト管理を作成する | BigQuery | Google Cloud 

  1. Google Cloud コンソールの [割り当て] ページに移動します(割り当ての操作 | ドキュメント | Google Cloud)。

  2. BigQuery API を選択します。

  3. ユーザーあたりの 1 日のクエリ使用量と 1 日あたりのクエリ使用量の割り当てを、無制限の状態から制限された GB / TB 数に変更します(下のスクリーンショットを参照)。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Blog_image_1.max-1600x1600.max-1600x1600.png

2. 課金されるバイト数を制限してクエリ費用を抑える

課金されるクエリのバイト数を制限するには、課金される最大バイト数を設定します。この設定を行うと、クエリが実行される前に、クエリで読み取られるバイト数が推定されます。推定バイト数が上限を超えると、クエリが失敗し、料金は発生しません。

課金される最大バイト数を設定したことによってクエリが失敗した場合は、次のようなエラーが返されます。

Error: Query exceeded limit for bytes billed: 1000000. 10485760 or higher required.(エラー: クエリが課金されるバイト数の上限: 1000000 を超えました。10485760 以上が必要です。)

ベスト プラクティス: 課金される最大バイト数を設定して、クエリ費用を抑えます。数 GB といった小規模から始めます。制限量は必要に応じて増やすことができます。

設定手順: 「BigQuery での費用管理」ガイド 

3. GCP で予算とアラートを作成して費用の急増を把握する

Cloud Billing の予算を作成して、Google Cloud のすべての料金を 1 か所でモニタリングすることで、想定外の請求が発生する事態を回避します。予算により、実際の Google Cloud の費用を予定費用と照らし合わせて追跡できます。予算額を設定したら、メール通知のトリガーに使用する予算アラートしきい値のルールを設定します。予算アラートのメールにより、予算に対する費用の追跡に関する最新情報を常に取得できます。また、予算を使用して費用管理レスポンスを自動化することもできます。

詳細 - 予算と予算アラートを作成、編集、削除する | Cloud Billing | Google Cloud 

ベスト プラクティス: 予算を設定して費用を追跡することを強くおすすめします。メール通知アラートをトリガーするしきい値ルールを設定します。費用(実際の費用または予測費用)が、設定したルールに基づく予算のパーセンテージを超えると、アラートメールが送信されます。

設定手順: 新しい予算を作成するには:

  1. 予算を作成して名前を付ける

  2. 予算の範囲を設定する

  3. 予算額を設定する

  4. 予算しきい値のルールとアクションを設定する

  5. [終了] をクリックして新しい予算を保存する

4. 適切なクエリを記述する

以下に、ベスト プラクティスを紹介します。

  • Select * を避ける

注: LIMIT 句をクエリに適用しても、読み取られるデータの量には影響しません。

  • テーブルデータを探索またはプレビューするためにクエリを実行しない

  • ドライランを行って、クエリを実行する前に常に費用を見積もる

  • 必要なデータのみを選択する

ベスト プラクティス: 新しい BigQuery ユーザーには必ずこれらのベスト プラクティスを認識してもらいます。以下の 2 つのドキュメントは必読です。

BigQuery での費用の管理 | Google Cloud 

クエリ計算の最適化 | BigQuery | Google Cloud

5. テーブルをパーティション分割して BigQuery ユーザーに WHERE 句の指定を強制する

パーティション分割テーブルは、パーティションと呼ばれるセグメントに分割された特殊なテーブルです。このテーブルを使用すると、データの管理や照会が簡単になります。大きいテーブルをパーティションに分割することで、クエリのパフォーマンスを高めたり、クエリによって読み取られるバイト数を減らして費用を抑えたりすることができます。

パーティション分割テーブルを使用すると、ユーザーは WHERE 句を指定しなければならなくなり、それによってテーブルのフルスキャンを制限する制約が適用されます。

クエリで、パーティショニング列の値に対する限定フィルタを使用すると、BigQuery では、フィルタに一致するパーティションがスキャンされ、残りのパーティションはスキップされます。この処理は「パーティションのプルーニング」と呼ばれます。

パーティションのプルーニングは、BigQuery で入力スキャンから不要なパーティションを削除するために使用する仕組みです。プルーニングされたパーティションは、クエリでスキャンしたバイト数の計算には含まれません。一般に、パーティションのプルーニングは、クエリの費用削減に役立ちます。

ベスト プラクティス: 可能な場所にはパーティショニングを導入します。これはパフォーマンス向上だけでなく、クエリの効率化にもつながります。以下の 2 つのドキュメントを読むことを強くおすすめします。

パーティション分割テーブルに対するクエリ | BigQuery | Google Cloud 

BigQuery での費用の管理 | Google Cloud 

設定手順: 分割テーブルの作成 | BigQuery | Google Cloud 

6. 予約 - 小規模から始め、使用状況に基づいてスロットを増やしていく

BigQuery には、分析用の次の 2 つの料金モデルが用意されています。

  • オンデマンド料金: クエリでスキャンされたデータに対して料金が発生します。プロジェクトごとにクエリの処理容量が固定されており、処理したバイト数に基づいて料金が請求されます。

  • 定額料金: 専用のクエリ処理容量を購入します。

デフォルトでは、オンデマンド料金モデルに沿って請求されます。BigQuery Reservations を使用してコミットメントを購入することにより、定額料金に切り替えることができます。コミットメントは BigQuery スロットの単位で購入します。処理データの費用はすべて定額料金に含まれます。

定額料金では、費用が固定され、予測可能です。お支払い額を前もって把握できることになります。

詳細 - Reservations の概要 | BigQuery | Google Cloud 

ベスト プラクティス: BigQuery スロット見積もりツールを使用して、オンデマンドでのスロット消費を把握します。スロットの使用が 100 を超え、比較的に安定していれば、Flex Slots のスロット を取得するか、月間または年間の予約を行うことを検討します。


設定手順: 予約を使ってみる | BigQuery | Google Cloud 

7. BigQuery の指標をモニタリングする

BigQuery にはネイティブの管理パネルがあり、モニタリング用に概要の指標が表示されます。また、BigQuery は既存の GCP サービスとも十分に統合されています。Cloud Logging では個別イベントの詳細ログを参照でき、BigQuery の使用状況とイベントの分析、報告、アラートには Cloud Monitoring ダッシュボードを利用できます。

詳細 - BigQuery 管理者リファレンス ガイド

ベスト プラクティス: 

  1. 適切にモニタリングを行うための鍵となるのは、予防的アラートを有効にすることです。たとえば、予約スロットの利用率が事前定義のしきい値を超えたとき、アラートを表示するように設定します。

  2. また、組織の個別のユーザーとチームが、セルフサービスの分析フレームワークやダッシュボードを使用して、各自のワークロードをモニタリングできるようにすることも重要です。これにより、ユーザーは動向をモニタリングし、リソースの需要予測や、総合的なパフォーマンスのトラブルシューティングを行えます。

  3. ぜひ INFORMATION_SCHEMA を理解し、リアルタイム レポートとアラートにご活用ください。ジョブ統計に関する他の例と、INFORMATION_SCHEMA の技術的な詳細については、こちらのブログをご覧ください。

設定手順: 

  1. すぐに BigQuery でのモニタリングにとりかかる場合、公開されているデータポータル ダッシュボードや、関連する github リソースを利用できます。

  2. Looker には、BigQuery の使用状況をモニタリングするための BigQuery Performance Monitoring Block も用意されています。

  3. すぐに利用できるログデータを使ってほぼリアルタイムの費用モニタリングを行うための、完全にサーバーレスのソリューションを実装する方法に関するブログ - BigQuery の費用モニタリングに対する実践的なアプローチを実施する | Google Cloud 公式ブログ 

8. トレーニング

以下は、BigQuery の新ユーザーに役立つトレーニング セッションのリストです。

コース: 

ハンズオンラボ: 

データ エンジニアリングとスマート アナリティクスの学習プログラム: 


- アナリティクス担当カスタマー エンジニア Sonakshi Pandey
投稿先