#GCP#BigQuery#SQL#Performance

Google BigQuery Internals: Slots, Particionamento e Performance

2026-01-25 DataFusionX Cloud Team 16 min read
Google BigQuery Analytics

A Arquitetura Dremel

O BigQuery não é apenas um banco de dados, é um motor de query distribuído baseado no paper Dremel do Google. Ele separa Compute (Slots) de Storage (Colossus) conectados pela rede Jupiter de petabit/s.

BigQuery Slots Architecture Diagram

O que são Slots?

Um Slot é uma unidade virtual de CPU e RAM. Quando você roda uma query, o BigQuery aloca dinamicamente slots para processar estágios da query. Clientes Enterprise podem comprar "Slot Reservations" para garantir performance constante.

Otimização via SQL

A forma como você escreve SQL impacta diretamente quantos slots são necessários e quantos bytes são lidos (custo).

1. Partitioning (Obrigatório)

Sempre particione tabelas grandes por data ou inteiro. Isso permite o Partition Pruning.


-- CREATE TABLE com particionamento
CREATE TABLE dataset.logs (
  event_timestamp TIMESTAMP,
  user_id STRING,
  message STRING
)
PARTITION BY DATE(event_timestamp);

-- Query Otimizada (Lê apenas a partição do dia)
SELECT * FROM dataset.logs
WHERE DATE(event_timestamp) = '2026-01-25';
      

2. Clustering (Otimização Fina)

Dentro da partição, ordene os dados por colunas frequentemente filtradas (ex: user_id).


CREATE TABLE dataset.users_clustered
PARTITION BY DATE(created_at)
CLUSTER BY user_id
AS SELECT * FROM dataset.raw_users;
      

BigQuery UDFs (User Defined Functions)

Para lógica complexa que o SQL padrão não resolve, use JavaScript UDFs. Elas rodam dentro dos slots do BigQuery, escalando massivamente.


CREATE TEMP FUNCTION json_extract_keys(json_str STRING)
RETURNS ARRAY
LANGUAGE js AS """
  try {
    var obj = JSON.parse(json_str);
    return Object.keys(obj);
  } catch (e) { return []; }
""";

SELECT json_extract_keys(json_payload) as keys
FROM dataset.events;
      

Conclusão

O BigQuery é poderoso, mas "com grandes poderes vêm grandes faturas". Monitorar o uso de slots e bytes processados via INFORMATION_SCHEMA é tarefa obrigatória para qualquer Data Lead.

./SUBSCRIBE_UPDATES

// Receba dicas de FinOps, cases de otimização e novidades sobre engenharia de dados.