クエリキャッシュとは
BigQuery は従量課金制のため、クエリを実行するたびにコストがかかります。
ただし SELECT クエリを実行すると結果がキャッシュに保存され、24時間以内に同じクエリを実行した場合はキャッシュから結果を取得できます。その場合はコストがかかりません。
クエリキャッシュが効かなくなるケース
クエリ内で CURRENT_DATE() 等を使うとキャッシュが効かなくなるのもそうですが、ここで伝えたいのは記事タイトルの通りです。
公式ドキュメントには制限事項として次のように書かれています。
同じクエリを重複して実行すると、BigQuery はキャッシュに保存された結果を再利用しようとします。キャッシュからデータを取得するには、重複するクエリテキストを元のクエリと同じにする必要があります。
「元のクエリと同じ」とは実質同じではなく、完全に一致するということです。
下記のパターンは全部NG。クエリキャッシュが効かなくなってしまうので注意しましょう。
- AS句でテーブル or カラムに別名をつけた
- クエリに改行やスペースを入れた or 消した
- 予約後を小文字から大文字に変えた(逆も然り)
- クエリにコメントを入れた or 消した
安全な方法
クエリキャッシュが効くかどうかをクエリ実行前に知ることはできません。
大きなクエリを複数回実行して余計コストをかけたくないですよね。
そんな時はジョブ履歴から前回実行のクエリを探しましょう。
ジョブ履歴なら前回実行したクエリを確認できるのはもちろん、その結果が格納された一時テーブルにアクセスすることもできます。
積極的に利用しましょう。