Aplicar comprimento exato em inserções em colunas fixed[L] Apache Iceberg™ (versão preliminar)¶
Atenção
Essa alteração de comportamento está no pacote 2026_02.
Para saber o status atual do pacote, consulte Histórico do pacote.
Snowflake aplicará inserções de comprimento exato em colunas fixed[L] Iceberg.
- Antes da mudança:
Colunas que usam o tipo de dados
fixed[L]Iceberg aceitam valores binários de até o comprimento definido “L” em bytes. Valores menores que L são permitidos.Valores maiores que L farão com que a consulta falhe.
- Após a mudança:
Colunas que usam o tipo de dados
fixed[L]Iceberg aceitam valores binários que correspondem exatamente ao comprimento definido “L” em bytes. Instruções INSERT que tentam inserir um valor binário menor que L resultam em um erro.Essa alteração alinha o Snowflake com a especificação do Iceberg e outros mecanismos compatíveis com o Iceberg, como o Apache Spark™.
A lista a seguir resume o comportamento após a ativação dessa alteração:
Esta alteração se aplica a tabelas Iceberg novas e existentes.
Esta alteração aplica-se tanto a tabelas Iceberg gerenciadas pelo Snowflake quanto a tabelas gerenciadas externamente.
Em relação às leituras, esta alteração não afeta Time Travel ou instantâneos mais antigos. Os instantâneos existentes permanecerão legíveis, pois o Snowflake valida o comprimento do tipo de dados
fixed[L]Iceberg apenas durante as operações DML.Em relação às gravações, com esta alteração ativada, o Snowflake sempre aplicará o comprimento correto do tipo de dados
fixed[L]Iceberg durante as operações de gravação, inclusive durante o Time Travel. As gravações que tentarem inserir um valor binário que não corresponda exatamente ao comprimento definido “L” em bytes sempre falharão. Valores maiores que L ainda farão com que a consulta falhe.
O que você precisa fazer para evitar qualquer interrupção do serviço: Identificar e resolver colunas afetadas.
Identificar e resolver colunas afetadas¶
Esta seção mostra como identificar se uma coluna foi afetada por este BCR e como resolver as colunas afetadas.
Etapa 1: Identificar colunas afetadas¶
Para identificar se você tem alguma coluna afetada, siga estas etapas:
Execute o comando DESCRIBE ICEBERG TABLE.
Na saída, procure por colunas com tipo de origem
fixed[L]Iceberg. Se encontrar uma colunafixed[L]do tipo Iceberg, prossiga para a próxima etapa.Execute a seguinte consulta:
SELECT BOOLOR_AGG(OCTET_LENGTH(<column_name>) != L) from <table_name>
Se a consulta retorna verdadeiro, a coluna contém valores de comprimento incorreto; portanto, a coluna foi afetada.
Etapa 2: Resolver as colunas afetadas¶
Para resolver as colunas afetadas, realize uma das seguintes opções:
Permitir a inserção de valores binários de tamanho arbitrário na coluna afetada, até um comprimento máximo¶
Para resolver as colunas afetadas, você pode permitir a inserção de valores binários de tamanho arbitrário na coluna afetada, até um comprimento máximo.
Essa resolução garante que os metadados e os arquivos físicos da tabela estejam alinhados com a especificação do Iceberg e, portanto, sejam compatíveis com mecanismos externos.
Para permitir a inserção de valores binários de tamanho arbitrário na coluna afetada, até um comprimento máximo, siga estas instruções:
Se a sua tabela for acessada por mecanismos externos, como o Spark, você deverá recriá-la usando o tipo de coluna BINARY.
Para recriar a tabela usando o tipo de coluna BINARY, siga estas etapas:
Para criar e preencher uma nova tabela com base na tabela com as colunas afetadas, execute o comando CREATE ICEBERG TABLE … AS SELECT (também conhecido como CTAS) e especifique binário como o tipo de dados para as colunas afetadas.
O exemplo a seguir mostra uma instrução CTAS em que o tipo de dados para a coluna b na nova tabela é especificado como binário:
CREATE ICEBERG TABLE my_table (..., b binary) AS SELECT * FROM my_old_table
Use o comando DROP ICEBERG TABLE para remover a tabela com as colunas afetadas.
Como alternativa, você pode evoluir o esquema da tabela executando o comando ALTER ICEBERG TABLE para definir o tipo de dados da coluna como BINARY.
Importante
Antes de executar uma instrução ALTER ICEBERG TABLE para alterar o tipo de dados de uma coluna para BINARY, você deve primeiro entrar em contato com o suporte Snowflake para habilitar essa funcionalidade para sua conta.
Por exemplo, a seguinte instrução evolui o esquema da tabela
talterando o tipo de dados da colunacparaBINARY:ALTER ICEBERG TABLE t ALTER COLUMN c SET DATA TYPE BINARY;
Essa abordagem é uma solução temporária e com suporte para clientes afetados durante o período BCR. A vantagem dessa abordagem é que você só precisa atualizar o esquema da tabela em vez de recriar a tabela inteira.
Importante
Essa abordagem não é uma promoção de tipo válida do Iceberg; portanto, mecanismos externos podem detectar uma promoção de tipo inválida e não conseguir atualizar a tabela. Portanto, você deve usar essa abordagem somente com tabelas Iceberg gerenciadas pelo Snowflake que não são lidas ou gravadas por mecanismos externos.
Permitir a inserção de valores binários de comprimento fixo exatamente igual a L na coluna afetada¶
Para permitir a inserção de valores binários de comprimento fixo exatamente igual a L na coluna afetada, certifique-se de que o tamanho do valor inserido corresponda ao tamanho desejado, ajustando seu fluxo de trabalho, usando truncamento ou preenchimento, por exemplo. Recomendamos também que você recrie a tabela Iceberg com o tipo de coluna fixed(L) Iceberg para garantir que o tamanho de qualquer valor inserido anteriormente na tabela corresponda exatamente ao comprimento definido L.
Ref: 2246