こんにちは。SCSKの磯野です。
BigQueryでTBレベルの大きなデータを扱うとき、意図しない高額課金のリスクを抑えたいと思ったことはありませんか?
今回は、大きなテーブルを扱う上で、コスト削減につながるTipsをいくつかご紹介します。
BigQueryの課金体系
BigQuery の料金は主に次の 2 つの要素で構成されています。
- コンピューティングの料金 は、SQL クエリ、ユーザー定義関数、 スクリプト、特定のデータ操作言語(DML)とデータ定義 言語(DDL)ステートメントがあります。
- ストレージ料金は、ストレージ BigQuery に読み込むデータを保存できます
本記事では、「コンピューティング料金」「ストレージ料金」それぞれのコストを削減する方法をご紹介します。
コンピューティング料金削減方法
その1:パーティショニングやクラスタリングを使用する
BigQueryには、パーティショニングとクラスタリングという機能があり、テーブル作成時にそれらを設定することで、クエリ実行時のパフォーマンスを向上させることができます。
なお、BigQueryにはパーティションとクラスタの Recommenderという機能があり、過去のワークロードに基づいてテーブルのパーティショニングやクラスタリングの適切な設定を推奨してくれます。Recommender API を有効にすることで利用できるため、是非活用してみてください。
その2:パーティションフィルタを必須とする
パーティションを使用したテーブルであっても、適切なクエリを書かないとうっかりフルスキャンが走ってしまう可能性があります。
そこで、パーティションフィルタを必須としておくことで、where句を適切に指定していないクエリはエラーとなるため、フルスキャンを防止することが可能となります。
その3:オンデマンドクエリの上限値を設定する
BigQuery API には以下のような割り当て (Quota) が設けられています。これらは、プロジェクト単位で指定が可能です。
- Query usage per day (1 日あたりのクエリ使用量)
- Query usage per day per user(ユーザーごとの 1 日あたりのクエリ使用量)
デフォルトでは「無制限」に設定されているため、割り当て (Quota) を設定することで上限を超えるクエリの実行を制限することが可能となります。
ストレージ料金削減方法
その4:ストレージ課金モデルの変更
BigQueryのストレージ料金には、2つの課金モデルがあります。
-
論理ストレージ(Logical Storage)課金
テーブルに格納されたデータの、圧縮前のデータサイズに対して課金するモデル -
物理ストレージ(Physical storage)課金
圧縮後のデータサイズに対して計算が行われる課金モデル。
デフォルトでは、論理ストレージ(Logical Storage)課金が設定されています。物理ストレージ課金へ変更することで、圧縮後の小さいデータサイズに対して課金されるため、利用料金が削減できる可能性があります。
ただし、物理ストレージ課金の場合、データサイズあたりの単価は高くなります。また、データの性質によって圧縮率が異なるため、物理ストレージ課金に変更することで必ずしもコストが削減されるとは限りません。ご自身の環境で圧縮率やデータサイズを確認したうえで、課金モデルの変更をご検討ください。
まとめ
いかがだったでしょうか。
BigQueryでTBレベルの大きなデータを扱うとき、費用を抑えるための方法をいくつかご紹介しました。
なお、万が一意図しない高額課金が発生してしまった場合、GCPのサポートに連絡すると、何らかの救済措置をしていただけるかもしれません。
本記事が皆様のお役に立てれば幸いです。