google_bigquery_table cost estimation
A BigQuery table is free to declare. Cost comes from the data stored in it per GB-month and the bytes queries scan against it, so schema and partitioning drive the real bill.
A google_bigquery_table defines a table (or view, or external table) inside a BigQuery dataset: its schema, partitioning, clustering, and expiration. Creating the table is free. An empty table costs nothing, and the DDL itself carries no charge. BigQuery bills for two things a table anchors: storage and the query bytes scanned against it.
Storage is billed per GB-month, split into active storage (data modified in the last 90 days) and long-term storage (untouched for 90 days), where long-term is roughly half price and applied automatically. Query cost, under the on-demand model, is billed per TiB of data scanned, and crucially BigQuery scans only the columns and partitions a query touches. This is why the table's design is the dominant cost lever: partitioning by date and clustering by common filter columns lets queries prune to a fraction of the table, cutting bytes scanned and therefore cost.
The table is free, but the schema and partitioning decisions made here determine both the ongoing storage bill and the per-query scan cost for the life of the table. c3x prices the stored bytes and the query scan cost a table drives and links it to the parent dataset, treating the table definition as free.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "google_bigquery_table" "events" {
dataset_id = google_bigquery_dataset.analytics.dataset_id
table_id = "events"
time_partitioning {
type = "DAY"
field = "event_time"
}
clustering = ["user_id", "event_type"]
schema = jsonencode([
{ name = "event_time", type = "TIMESTAMP" },
{ name = "user_id", type = "STRING" },
{ name = "event_type", type = "STRING" }
])
}Pricing dimensions
What you actually pay for when you provision google_bigquery_table.
| Dimension | Unit | What's being charged |
|---|---|---|
| Table definition | free | Creating the table and its schema has no charge. An empty table costs nothing. $0 |
| Active storage | per GB-month | Data in the table modified within the last 90 days. ~$0.02/GB-month |
| Long-term storage | per GB-month | Data untouched for 90 days, automatically billed at roughly half the active rate. ~$0.01/GB-month |
| Query bytes scanned | per TiB | On-demand queries bill per TiB scanned, reading only the columns and partitions touched. ~$6.25/TiB scanned |
Optimization tips
Common ways to reduce google_bigquery_table cost without changing the workload.
Partition by date
Often 90%+ less scannedTime-partitioning lets queries with a date filter scan only the relevant partitions instead of the whole table, cutting bytes scanned and on-demand query cost sharply.
Cluster by common filter columns
Further scan reductionClustering on frequently filtered columns lets BigQuery skip blocks that cannot match, reducing scanned bytes on top of partition pruning.
Set partition expiration
Removes storage for aged-out dataExpiring old partitions automatically drops stale data so it stops billing for storage, without a manual cleanup job.
FAQ
Does a BigQuery table cost money?
Not to create. An empty table is free. Cost comes from data stored in it (per GB-month, active or long-term) and the bytes queries scan against it (per TiB under on-demand pricing).
What is the biggest BigQuery table cost lever?
Query bytes scanned, controlled by partitioning and clustering. A well-partitioned table lets queries prune to a fraction of the data, cutting per-query scan cost by an order of magnitude.
How does long-term storage pricing work?
Any table or partition not modified for 90 days automatically drops to long-term storage at roughly half the active rate. No action is needed; BigQuery applies it per partition.
Related resources
google_bigquery_datasetThe parent dataset that sets location and default storage billing for the table.
google_bigquery_jobThe queries and loads that scan the table and drive its query cost.
google_storage_bucketA common source for loading data into, or exporting data out of, the table.
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including google_bigquery_table.