• トップ
  • ブログ一覧
  • BigQueryのストレージ課金モデル
  • BigQueryのストレージ課金モデル

    新田(エンジニア)新田(エンジニア)
    2024.11.26

    IT技術

    BigQueryデータセットのストレージ消費単位

    もともとは論理バイト単位で課金されていたのですが、2023年7月の料金改定から、データ圧縮後の物理バイトを課金の単位にすることもできるようになりました。
    論理・物理というのはテーブル詳細画面にも記載されていて、論理がデータをそのまま保存した場合の容量で、物理は圧縮して実際にかかっている容量のことのようです。

    料金

    論理バイト物理バイト
    アクティブ(USD/GB)0.0230.052
    長期(USD/GB)0.0160.026

    一見、物理バイトのほうが高く見えるのですが圧縮率が1/10になることもあるようで、その場合は物理バイトで課金したほうが安くなります。
    物理バイトの場合はタイムトラベル用のストレージも含めて計算する必要があります。(逆に論理バイトはタイムトラベル用ストレージは考慮しなくて良いです)
    また、90日間変更がないと自動的に長期のストレージとして扱われます。

    クエリでどちらを選べば良いか調べよう

    どちらがいいかはデータの内容によるのですが、便利なINFORMATION_SCHEMAを使った以下のクエリを実行してどちらが安いかを調べることができます。(公式ドキュメントの例を元に作成しました。)
    active_logical_gib_priceなどの料金、usd_rate(為替レート)、region-asia-northeast1(リージョン)の部分は適切な値に変更してください。

    1DECLARE
    2  active_logical_gib_price FLOAT64 DEFAULT 0.023;
    3DECLARE
    4  long_term_logical_gib_price FLOAT64 DEFAULT 0.016;
    5DECLARE
    6  active_physical_gib_price FLOAT64 DEFAULT 0.052;
    7DECLARE
    8  long_term_physical_gib_price FLOAT64 DEFAULT 0.026;
    9DECLARE
    10  usd_rate FLOAT64 DEFAULT 155.;
    11
    12with
    13    storage_sizes as (
    14        select
    15            table_schema as dataset_name,
    16            sum(active_logical_bytes) / power(1024, 3) as active_logical_gib,
    17            sum(long_term_logical_bytes) / power(1024, 3) as long_term_logical_gib,
    18            sum(active_physical_bytes) / power(1024, 3) as active_physical_gib,
    19            sum(long_term_physical_bytes) / power(1024, 3) as long_term_physical_gib,
    20        from `region-asia-northeast1`.information_schema.table_storage_by_project
    21        where total_logical_bytes > 0 and total_physical_bytes > 0
    22        group by table_schema
    23    ),
    24    cost as (
    25        select
    26            *,
    27            active_logical_gib * active_logical_gib_price
    28            + long_term_logical_gib * long_term_logical_gib_price as logical_cost_usd,
    29            active_physical_gib * active_physical_gib_price
    30            + long_term_physical_gib
    31            * long_term_physical_gib_price as physical_cost_usd,
    32        from storage_sizes
    33    ),
    34    cost_in_yen as (
    35        select
    36            *,
    37            cast(logical_cost_usd * usd_rate as int64) as logical_cost_yen,
    38            cast(physical_cost_usd * usd_rate as int64) as physical_cost_yen,
    39            cast(
    40                (physical_cost_usd - logical_cost_usd) * usd_rate as int64
    41            ) as diff_cost_yen_when_change_physical,
    42        from cost
    43    )
    44select
    45    dataset_name,
    46    logical_cost_yen as l_cost,
    47    physical_cost_yen as p_cost,
    48    diff_cost_yen_when_change_physical as diff_cost,
    49from cost_in_yen
    50order by diff_cost_yen_when_change_physical

    各数値の意味は以下の通りで、単位は全て日本円です。

    • l_cost: 論理バイトで計算した場合の金額
    • p_cost: 物理バイトで計算した場合の金額
    • diff_cost: 論理バイト -> 物理バイト と変更した場合の金額の差

    出力例

    dataset_namel_costp_costdiff_cost
    web_log200001800-18200
    keiba80002000-6000
    web_mart15205
    web_analysis28000300002000

    diff_costの列を見てください。
    上の例では、web_log, keibaのデータセットでは物理バイトで課金したほうが安くなります。
    web_analysisデータセットがそうなんですが、ほとんどの列のカーディナリティが高くて圧縮率が低くならない場合や、毎日集計しているようなテーブルはタイムトラベル用ストレージが高くなり論理バイトで課金したほうが安くなるようです。
    web_martのように日時や月次で集計したテーブルは容量が小さいのでどちらでも安いことが多いです。

    まとめ

    新田新田
    ストレージ料金はGCSの料金と同じで無料枠もあって安いよなーとも思うんですが、ビッグデータを扱うと結構な金額になってしまいます。それが毎月課金となるのでお得な課金モデルを選択してコストを削減しましょう。正確な情報はBigQueryの公式ドキュメントを参照してください。

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background