Exportação de Parquet no Snowflake Pode Corromper Dados INT32
Aprofundamento CEVIU
Aprofundamento
A questão da corrupção de dados na exportação Parquet do Snowflake não é um mero erro de digitação. É um comportamento do sistema. O Snowflake, para otimização de armazenamento, guarda valores internos usando o menor tipo inteiro possível. Para colunas como BYTES_SCANNED na tabela QUERY_HISTORY, que o catálogo informa ser NUMBER(38,0), o sistema decide armazená-lo como um inteiro de 4 bytes, o equivalente a um INT32.
Quando você exporta essa coluna sem transformações, o escritor Parquet apenas replica a representação interna de INT32. Se o valor real excede o limite de um INT32 (2.147.483.647), ocorre um overflow. Isso gera números negativos ou valores positivos que não correspondem ao original. Nove colunas na QUERY_HISTORY estão sujeitas a isso: bytes_scanned, rows_produced, rows_updated, rows_deleted, rows_unloaded, bytes_deleted, transaction_id, session_id e authn_event_id. A solução é simples: aplicar um CAST explícito para NUMBER(38,0) nas colunas afetadas durante a exportação para Parquet.
Por que isso importa
Integridade dos dados é fundamental para qualquer pipeline, e este cenário mostra um perigo silencioso. Os valores corrompidos em métricas como bytes_scanned podem distorcer completamente a análise de custos de uso do Snowflake. Um transaction_id ou session_id alterado, por exemplo, pode levar a joins incorretos e prejudicar a rastreabilidade. Em última instância, a falta de atenção a esses detalhes pode minar a confiança nos dados, gerando decisões de negócio equivocadas. É um lembrete forte de que a validação de tipos de dados entre sistemas é uma etapa crucial na engenharia de dados.
Linha do tempo
Problema de corrupção de dados INT32 em exportação Parquet do Snowflake é identificado.
Perguntas frequentes
O que é a corrupção de dados na exportação Parquet do Snowflake?
É um problema onde valores numéricos grandes, especialmente da tabela QUERY_HISTORY, são escritos como INT32 no formato Parquet, mesmo sendo NUMBER(38,0) no catálogo do Snowflake. Isso causa um overflow, resultando em números negativos ou valores positivos incorretos que não refletem os dados originais.
Quais colunas da tabela QUERY_HISTORY são afetadas por este problema?
As nove colunas afetadas são bytes_scanned, rows_produced, rows_updated, rows_deleted, rows_unloaded, bytes_deleted, transaction_id, session_id e authn_event_id. A corrupção pode levar a análises financeiras erradas e problemas de integridade em identificadores como transaction_id.
Como posso prevenir a corrupção de dados ao exportar Parquet do Snowflake?
A prevenção envolve a realização de um CAST explícito para um tipo de dados mais adequado, como NUMBER(38,0), nas colunas afetadas durante a declaração do comando COPY INTO. Mesmo um CAST de identidade força o Snowflake a usar a declaração do catálogo, garantindo que o escritor Parquet emita um DECIMAL correto, e não um INT32 truncado.
Por que o Snowflake exporta INT32 para colunas NUMBER(38,0) no Parquet?
O Snowflake otimiza o armazenamento interno usando o tipo inteiro mais estreito que pode conter o valor. Se uma coluna NUMBER(38,0) tem seus valores guardados internamente como INT32, e é exportada para Parquet sem nenhuma expressão, o escritor Parquet assume essa representação interna de 4 bytes. Qualquer expressão, incluindo um CAST, força o Snowflake a consultar o tipo declarado no catálogo (NUMBER(38,0)) e usar uma representação adequada.
Fontes
- espresso.aifonte original
- Categoria
- CEVIU Dados
- Publicado
- 17 de agosto de 2026
- Editoria
- CEVIU Dados

