Voltar
Iceberg v4 introduz stats-only fields para armazenar estatísticas de expressões de partição

Iceberg v4 ganha stats-only fields para guardar estatísticas de expressões de partição

Aprofundamento CEVIU

Aprofundamento

A proposta de spec (PR 18405 no repositório do Apache Iceberg) adiciona os stats-only fields aos metadados da tabela. Um campo desse tipo serve para rastrear estatísticas de um valor derivado que não é materializado. O exemplo do próprio PR é guardar estatísticas de to_lower_case(name) sem criar uma coluna nova. O texto prevê dois casos: campos de partição, para o resultado de bucket partitioning, e expressões de valor, para usos como o da string em minúsculas.

A discussão no PR mostra os pontos delicados do desenho. O tipo partition-value não exige data-type, porque o tipo pode ser promovido (de int para long, por exemplo) quando a coluna de origem é alargada, e o metadado ficaria defasado. A proposta em debate pede data-type sempre que o tipo do campo não define como derivar o resultado, e ele deve ser primitivo ou variant. Sobre escrita, o texto atual diz que o writer deve preservar estatísticas existentes quando o data-type é conhecido. Deve produzir estatísticas quando possível. Se a expressão não é suportada, gera tipo incompatível ao ser vinculada ou falha na vinculação, o writer grava o struct de estatísticas do campo como nulo.

Os autores também reconhecem um risco: promoções de tipo (como date para timestamp) podem mudar o valor de uma expressão como bucket, o que poderia causar pruning incorreto. A resposta no PR foi tratar isso em discussão separada e orientar o uso de expressões que deem resultado consistente entre promoções de tipo.

Por que isso importa

Para quem modela tabelas Iceberg e cuida de desempenho de consulta, isso abre caminho para filtrar por expressões frequentes (buckets, texto normalizado) sem duplicar colunas e sem pagar armazenamento extra. É uma leitura editorial: o ganho depende de engines e writers implementarem a spec e do cuidado com a evolução de schema, já que expressões que mudam de comportamento invalidam estatísticas antigas.

Perguntas frequentes

O que são stats-only fields no Iceberg v4?

São campos de metadados que guardam estatísticas de um valor derivado, como to_lower_case(name) ou o resultado de um bucket de partição, sem materializar uma coluna na tabela. As estatísticas ficam nas estruturas content_stats dos manifests.

Para que serve o flag tight_stats?

Ele marca, no nível de arquivo, contagens exatas de linhas ativas e limites elegíveis. Com isso o planejamento de consultas melhora e, em alguns casos, dá para fazer computações só com metadados, sem varrer os arquivos de dados.

O que acontece se a expressão não puder ser avaliada pelo writer?

Segundo o texto em discussão no PR, o writer deve gravar o struct de estatísticas do campo como nulo quando a expressão não é suportada, gera tipo incompatível ou a vinculação falha. Estatísticas já existentes devem ser preservadas se o data-type for conhecido.

Promover o tipo da coluna de origem pode invalidar as estatísticas?

Pode, em casos como bucket sobre date promovido a timestamp, em que o valor do hash muda. Os mantenedores disseram que isso merece discussão própria e recomendam usar expressões que produzam resultado consistente entre promoções de tipo.

Fontes

Avalie este artigo:
Categoria
CEVIU Dados
Publicado
12 de novembro de 2026
Editoria
CEVIU Dados

Quer receber mais sobre CEVIU Dados?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser