BigQuery é o data warehouse serverless e colunar do GCP. Executa queries SQL analíticas sobre petabytes de dados sem necessidade de gerenciar clusters ou infraestrutura.
Nasceu do Dremel, tecnologia interna do Google, e separa completamente storage de compute.
Arquitetura
graph LR subgraph BigQuery A["Dremel - SQL Engine"] <-->|queries| B["Capacitor / Colossus - Storage"] end
Storage e compute são independentes e escaláveis de forma separada.
Hierarquia de objetos
graph TD P[Project] --> D[Dataset] D --> T[Table] D --> V[View] D --> R[Routine]
- Dataset: equivale a um schema/banco em SQL tradicional. Tem região definida na criação.
- Tabela nativa: dados armazenados no Colossus (storage proprietário do Google).
- Tabela externa: query sobre dados no GCS, Google Sheets, etc., sem ingestão.
- View materializada: resultado de query persistido e atualizado automaticamente.
Modelos de cobrança
| Modo | Como funciona | Quando usar |
|---|---|---|
| On-demand | Paga por TB processado (~$6.25/TB) | Cargas imprevisíveis |
| Capacity (slots) | Reserva slots de compute por hora/mês | Cargas previsíveis e altas |
| Autoscale | Slots sob demanda com baseline reservado | Híbrido |
Slot = unidade de compute do BigQuery. 1 query pode usar centenas de slots em paralelo.
Particionamento
Divide a tabela fisicamente para reduzir bytes lidos (= custo e velocidade):
-- Por coluna DATE/TIMESTAMP
CREATE TABLE meu_dataset.eventos
PARTITION BY DATE(event_timestamp)
AS SELECT * FROM source;
-- Por coluna INTEGER (range)
CREATE TABLE meu_dataset.pedidos
PARTITION BY RANGE_BUCKET(cliente_id, GENERATE_ARRAY(0, 1000, 100));
-- Por ingest time (automático)
CREATE TABLE meu_dataset.logs
PARTITION BY _PARTITIONDATE;Sempre filtrar pela coluna de partição no WHERE para aproveitar partition pruning.
Clustering
Ordena os dados dentro de cada partição por até 4 colunas. Reduz bytes lidos em filtros e JOINs:
CREATE TABLE meu_dataset.vendas
PARTITION BY DATE(data_venda)
CLUSTER BY regiao, produto_id
AS SELECT * FROM source;Clustering é mais eficiente que índices tradicionais: o BigQuery reordena automaticamente à medida que os dados crescem.
Carregamento de dados
-- Criar tabela a partir de GCS (bq load)
bq load \
--source_format=PARQUET \
meu_dataset.tabela \
gs://meu-bucket/dados/*.parquet
-- INSERT via SQL
INSERT INTO meu_dataset.tabela SELECT * FROM outra_tabela;
-- Merge (upsert)
MERGE meu_dataset.destino AS T
USING meu_dataset.staging AS S
ON T.id = S.id
WHEN MATCHED THEN UPDATE SET T.valor = S.valor
WHEN NOT MATCHED THEN INSERT VALUES (S.id, S.valor);Tabelas externas e BigLake
-- Tabela externa sobre GCS (Parquet)
CREATE EXTERNAL TABLE meu_dataset.eventos_ext
OPTIONS (
format = 'PARQUET',
uris = ['gs://meu-bucket/raw/*.parquet']
);BigLake estende tabelas externas com controle de acesso por coluna/linha e cache gerenciado, permitindo governance sem mover os dados.
Recursos úteis
- BI Engine: cache in-memory para queries de BI (Looker Studio, Tableau) com latência sub-segundo
- BigQuery ML: treina modelos ML diretamente com SQL (
CREATE MODEL) - Scheduled Queries: queries agendadas via UI/API sem Airflow
- Authorized Views: views com ACL própria, úteis para row-level security
- Information Schema: metadados sobre jobs, tabelas, slots e consumo
-- Jobs recentes e bytes processados
SELECT job_id, query, total_bytes_processed, total_slot_ms
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE DATE(creation_time) = CURRENT_DATE()
ORDER BY total_bytes_processed DESC
LIMIT 20;Deep dive
- gcp-bigquery-cobranca: modelos de cobrança, slots, edições e monitoramento de custos
- gcp-bigquery-sql: dialeto GoogleSQL, ARRAY, STRUCT, UNNEST, scripting, TVFs
- gcp-bigquery-otimizacao: particionamento, clustering, materialized views, plano de execução
- gcp-bigquery-dataform: Dataform (SQLX), comparação com dbt, assertions
- gcp-bigquery-notebooks: notebooks nativos, BigQuery DataFrames, Colab Enterprise
- gcp-biglake: governança por coluna/linha sobre dados no GCS
Ver também: gcp | gcp-cloud-storage | gcp-dataflow | gcp-dataplex | gcp-looker | gcp-boas-praticas | arquitetura-medalhao | data-lake-lakehouse