BigQueryをCapacity Compute pricingで使うときに、Slotという仮想的な計算資源(≒CPU)を使ってクエリの実行が行われます。
このSlotをいくつ確保するかによってBigQueryの費用が決まります。確保するSlotの数は固定値にすることも、負荷変動に応じてオートスケールさせることもできます。
しかし、オートスケールで確保できるSlotの数は50slot単位かつ1分単位でしかないです。そのため、極端な例ですが1slotを1秒だけ使った場合には49Slot * 59秒が確保されたけれど使われていない状態になります。
このようなSlotをこの記事では余剰Slotと呼び、有効活用する方法について考えます。
余剰Slotが発生した場合には、管理プロジェクトを同一にする他のReservation内で「おすそわけ」が行われます。
そのため、余剰Slotがそのまま無駄になるわけではないです。
ここで、以下のようなReservationを作成することを考えます。slot_capacityが0なので一見すると一切のクエリが実行できないようにも見えます。
しかし、先程説明した「おすそわけ」の効果によって、他のReservationで余ったSlotを使うことができます。
resource "google_bigquery_reservation" "parasite" {
project = "<Project ID>"
name = "parasite"
location = "US"
slot_capacity = 0
edition = "ENTERPRISE"
ignore_idle_slots = false
concurrency = 0
}
クエリをこのReservationで実行することで、今まで無駄になっていたSlotを利用することができ、「実質無料」でクエリを実行できます。
しかし、この方法を採る場合、どの程度のSlotが使用できるかを事前に予測することは困難です。場合によっては一切のSlotを利用できない可能性もあります。
そのため、基本的には実行時間に対する制約の緩いクエリに対してのみ使用し、実行時間に対する要件が明確なクエリに対してはしっかりとSlotを確保して実行するほうが良いです。