---
title: "BigQuery クエリコストについて | grasys blog"
url: "https://blog.grasys.io/post/suwa/bigquery/"
description: "こんにちは、ATです。 最近、BigQueryのクエリを書いていて気になったことがあったのでメモしときます。(2022/03/18時点の内容) BigQueryをオンデマンドで使ってるとクエリ実行時の課金額が気になりますよね。 オンデマンドでは、読んだデータ量に応じて課金されるので、どのくらいのデータ量なのか気にしつ…"
---

# BigQuery クエリコストについて

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[AT](/authors/suwa/)
-   公開日：2022年3月18日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#BigQuery](/tags/bigquery/)[#SQL](/tags/sql/)

![BigQuery クエリコストについて](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

こんにちは、ATです。

最近、BigQueryのクエリを書いていて気になったことがあったのでメモしときます。(2022/03/18時点の内容)

BigQueryをオンデマンドで使ってるとクエリ実行時の課金額が気になりますよね。 オンデマンドでは、読んだデータ量に応じて課金されるので、どのくらいのデータ量なのか気にしつつクエリ叩いてたりして。なのでなるべくデータ量を少なくするためにカラムを必要なものだけ指定したり、テーブルをパーティションテーブルにする、といった対策をしてると思います。その延長線でサブクエリの使い回しとかでもデータ量節約できないか？みたいな感じでWITH句使ってたりしてました。

ところが、  
[https://cloud.google.com/bigquery/docs/cached-results](https://cloud.google.com/bigquery/docs/cached-results)

ここを見るとどうもそうではないようです。

![BigQueryが同一クエリのキャッシュ結果を再利用する条件を説明したドキュメント](/_astro/01-14-3d1de239.BTUQARrA_N9NF6.webp)

Plain textcontent\_copy

```
同じクエリを重複して実行すると、BigQuery はキャッシュに保存された結果を再利用しようとします。キャッシュからデータを取得するには、重複するクエリテキストを元のクエリと同じにする必要があります。
```

![BigQueryでキャッシュ結果を使用したクエリは課金対象外と説明するドキュメント](/_astro/02-15-ab31ac60.ChKBxINy_Zj7mi.webp)

Plain textcontent\_copy

```
キャッシュに保存された結果を使用したクエリは、課金の対象となりませんが、BigQuery の割り当てポリシーの対象にはなります。
```

とあり、キャッシュを使えれば課金されないことがわかります。 おそらくなんとなくこれを覚えていて、サブクエリをWITH句にしとけばキャッシュが効くと勝手に脳内補完されていました。その為とりあえずサブクエリをWITH句で書く癖がついていました。 しかしながら下記リンク先を見ると、

[https://cloud.google.com/bigquery/docs/best-practices-performance-compute](https://cloud.google.com/bigquery/docs/best-practices-performance-compute)

![BigQueryの共通テーブル式は参照のたびに評価されると説明するドキュメント](/_astro/03-16-f52902d0.-7NIl-qB_1r7bkS.webp)

Plain textcontent\_copy

```
クエリ内の複数の場所で使用される共通テーブル式がクエリに含まれている場合、それらは参照されるたびに評価されます。これにより、内部クエリの複雑さとリソースの消費量が増加する可能性があります。
```

となっており、そうは甘くないようです。BigQueryはヤワではない。 と言う訳でこのアプローチの道は閉ざされました。では、どうすれば少しでも読み込み量を節約できるか？それについても上記引用に答えが書いてありました。 1時テーブルを使用する方法です。  
1時テーブルを使えばテーブルに対する読み込みには課金はありますが、ストレージには課金されません。可能な限りサマった集計結果を保存して使いまわすことでコスト節約が期待できます。

## この記事を書いた人

[![](/_astro/suwa.Dtk7B4h9_ZEmErx.webp)](/authors/suwa/)

### [AT](/authors/suwa/)

ATのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/suwa/)
