If a table is not partitioned by a relevant column (typically a timestamp), every query scans the entire dataset, even if filtering by date. This leads to: * High costs per query * Long execution times * Inefficient use of resources when querying recent or small subsets of data This inefficiency is especially common in: * Event or log data stored in raw, unpartitioned form Historical data migrations without schema optimization * Workloads developed without awareness of BigQuery’s scanning model
BigQuery charges primarily based on: * The amount of data scanned per query (on-demand pricing) * Alternatively, flat-rate slots (for enterprises with high query volumes) When using on-demand pricing, scanning large unpartitioned tables dramatically increases cost—even for queries targeting small slices of data.
Partitioned Tables in BigQuery Best Practices for Controlling Costs