Metadados e retenção para tabelas Apache Iceberg™¶
O Snowflake trata metadados para tabelas Apache Iceberg™ de acordo com o tipo de catálogo que você usa (Snowflake ou externo).
Nota
A especificação do número mínimo padrão de instantâneos com a history.expire.min-snapshots-to-keep propriedade de tabela não é compatível com nenhum tipo de tabela Iceberg.
Tabelas que usam o Snowflake como o catálogo¶
O Snowflake gerencia o ciclo de vida dos metadados para esse tipo de tabela e exclui metadados, listas de manifesto e arquivos de manifesto antigos com base no período de retenção dos dados da tabela e snapshots.
Para definir o período de retenção para dados de tabela e snapshots, defina o parâmetro DATA_RETENTION_TIME_IN_DAYS no nível de conta, banco de dados, esquema ou tabela.
Criação¶
O Snowflake gera metadados para a versão 2 da especificação Apache Iceberg periodicamente e grava os metadados em arquivos no seu volume externo. Cada novo arquivo de metadados contém todas as alterações DML ou DDL feitas desde a criação do último arquivo de metadados gerado pelo Snowflake.
Você também pode criar metadados sob demanda usando a função SYSTEM$GET_ICEBERG_TABLE_INFORMATION. Para obter instruções, consulte Geração de instantâneos de alterações de DML.
Para obter informações sobre como localizar arquivos de metadados, consulte Diretórios de dados e metadados.
Visualização do histórico de criação de metadados¶
Para acessar um histórico completo de tentativas de geração de metadados, exiba o histórico de consulta da sua conta e filtre os resultados. Procure o nome da função SYSTEM$GET_ICEBERG_TABLE_INFORMATION no texto SQL.
O Snowflake usa internamente a mesma função SYSTEM$GET_ICEBERG_TABLE_INFORMATION para gerar metadados da tabela. As tentativas feitas pelo Snowflake aparecem no usuário chamado SYSTEM no histórico de consulta. A coluna STATUS no histórico de consulta indica se os metadados foram gerados com sucesso.
Para opções de exibição, consulte Monitoramento da atividade de consulta com o Histórico de consultas.
Exclusão¶
O Snowflake exclui metadados Iceberg do seu armazenamento em nuvem externo quando os seguintes eventos ocorrem:
Depois de você descartar uma tabela.
Quando os metadados Iceberg se referem a snapshots ou dados de tabela que expiraram.
A exclusão não ocorre imediatamente após o término do período de retenção de dados. Como resultado, o armazenamento de metadados pode incorrer em custos com seu provedor de armazenamento em nuvem por mais tempo do que a vida útil de uma tabela.
Aviso
O Snowflake não é compatível com fail-safe para tabelas Iceberg gerenciadas pelo Snowflake, visto que os dados da tabela estão em um armazenamento em nuvem externo gerenciado por você. Para proteger os dados da tabela Iceberg, você precisa configurar a proteção e recuperação de dados com seu provedor de nuvem.
Depois de descartar uma tabela¶
Ao remover uma tabela, você pode usar o comando UNDROP ICEBERG TABLE para restaurá-la dentro do período de retenção de dados.
Quando o período de retenção expira, o Snowflake exclui os metadados da tabela e os snapshots que ele gravou do local do seu volume externo. A exclusão ocorre de forma assíncrona e pode levar alguns dias para ser concluída após o término do período de retenção.
Nota
Para tabelas convertidas, o Snowflake exclui apenas metadados que foram gerados após a conversão da tabela.
Após a expiração dos snapshots¶
O Snowflake exclui os arquivos de metadados Iceberg relacionados a snapshots expirados após o término do período de retenção de dados. A exclusão geralmente ocorre de 7 a 14 dias após a expiração de um snapshot.
Somente snapshots de tabelas anteriores podem expirar. O Snowflake nunca exclui arquivos de metadados que representam o estado mais recente (atual) de uma tabela do seu armazenamento em nuvem externo.
Tabelas que usam um catálogo externo¶
Para tabelas que utilizam um catálogo externo, o Snowflake usa o valor do parâmetro DATA_RETENTION_TIME_IN_DAYS para definir um período de retenção para o Snowflake Time Travel e descartar a tabela. Quando o período de retenção expira, o Snowflake não exclui os metadados ou snapshots do Iceberg do seu armazenamento em nuvem externo.
O Snowflake define DATA_RETENTION_TIME_IN_DAYS ao nível da tabela para o menor dos seguintes valores:
O valor
history.expire.max-snapshot-age-msno arquivo de metadados atual. O Snowflake converte o valor em dias (arredondando para baixo).O seguinte valor, dependendo da edição da sua conta Snowflake:
Standard Edition: 1 dia.
Enterprise Edition ou superior: 5 dias.
Você não pode alterar manualmente o valor de DATA_RETENTION_TIME_IN_DAYS em Snowflake. Para alterar o valor, você deve atualizar history.expire.max-snapshot-age-ms em seu arquivo de metadados e, em seguida, atualizar a tabela.
É possível usar as seguintes funções de tabela para recuperar informações sobre os arquivos registrados em uma tabela Iceberg gerenciada externamente ou o histórico de atualização de instantâneo mais recente:
Tabelas baseadas em Delta¶
Nota
Se quiser usar gravações de metadados para tabelas Iceberg baseadas em Delta, o pacote de mudança de comportamento 2025_01 não deve ser desativado em sua conta.
Para tabelas Iceberg criadas a partir de arquivos de tabela Delta, o Snowflake grava automaticamente os metadados Iceberg em seu armazenamento externo se você configurar o volume externo com acesso de gravação (consulte ALLOW_WRITES). Para obter mais informações sobre o local de gravação, consulte Diretórios de dados e metadados.
Para evitar que o Snowflake grave metadados Iceberg, você pode definir o parâmetro ALLOW_WRITES como FALSE no volume externo, desde que nenhuma tabela Iceberg gerenciada pelo Snowflake use o mesmo volume externo.
Particionamento Iceberg¶
Esta seção descreve o particionamento Iceberg.
O Snowflake oferece suporte para os seguintes casos de uso de particionamento:
Leitura e gravação em tabelas Iceberg particionadas.
Criação de tabelas Iceberg particionadas gerenciadas pelo Snowflake ou externamente em um banco de dados vinculado a catálogo ou gerenciadas externamente por um catálogo REST Iceberg.
Ao criar uma tabela Iceberg particionada, você pode habilitar o particionamento oculto ou o particionamento com caminhos hierárquicos, também chamado de particionamento «estilo Hive».
Particionamento com caminhos hierárquicos¶
Com essa opção, o Snowflake grava dados em tabelas Iceberg particionadas usando um layout de caminho hierárquico para arquivos de dados Parquet. As informações de particionamento são incluídas nos caminhos dos arquivos e os valores são baseados em transformações que você define ao criar uma tabela. Esse layout também é chamado de particionamento «estilo Hive». Você pode usar essa opção para interoperabilidade entre o Snowflake e mecanismos externos compatíveis com gravações particionadas com caminhos hierárquicos.
Aqui está um exemplo de um arquivo de dados armazenado em um caminho hierárquico:
s3://my-bucket/iceberg/db_sales/orders/data/country=US/year=2025/month=02/day=21/part-00023.parquet
Para obter mais informações sobre o layout dos diretórios de dados e metadados para tabelas que usam caminhos hierárquicos, consulte Gerenciamento de arquivos.
Criar uma tabela com caminhos hierárquicos¶
Para criar uma tabela Iceberg particionada com um layout de caminho hierárquico, defina as seguintes propriedades em sua instrução CREATE ICEBERG TABLE regular:
Defina PATH_LAYOUT = HIERARCHICAL.
Inclua a cláusula PARTITION BY com uma ou mais transformações de partição.
Para obter um exemplo de criação de uma tabela Iceberg particionada com um layout de caminho hierárquico em um banco de dados vinculado a catálogo, consulte Criar uma tabela Iceberg em um banco de dados vinculado a catálogo com layout de caminho hierárquico.
Matriz de suporte para particionamento¶
A tabela a seguir mostra quais recursos e ações são compatíveis com cada tipo de tabela Iceberg particionada e indica a conformidade com a versão 2 da especificação Apache Iceberg. A tabela mostra a compatibilidade tanto com particionamento oculto quanto com particionamento com caminhos hierárquicos.
Nota
A compatibilidade com a versão 3 da especificação Apache Iceberg™ está em versão preliminar pública. Essa versão preliminar pública inclui compatibilidade com o uso de vetores de exclusão com tabelas particionadas. Para obter mais informações sobre essa versão preliminar pública, consulte Tabelas Apache Iceberg™: Suporte para Apache Iceberg™ v3 (versão preliminar).
CLD significa banco de dados vinculado a catálogo (catalog-linked database).
Gerenciado pelo Snowflake |
Gerenciado externamente (CLD) |
Gerenciado externamente (não CLD) |
Compatibilidade com Iceberg especificação V2 |
Comentário |
|
|---|---|---|---|---|---|
Comandos COPY com a opção ON_ERROR = ABORT_STATEMENT |
❌ |
❌ |
❌ |
❌ |
|
COPY INTO <table> |
Suporte limitado |
Suporte limitado |
Suporte limitado |
Suporte limitado |
Consulte Notas de uso. |
CREATE ICEBERG TABLE … AS SELECT (CTAS) |
✔ |
✔ |
✔ |
✔ |
|
Clonagem |
✔ |
✔ |
✔ |
✔ |
Consulte as notas de uso: |
CREATE ICEBERG TABLE … LIKE |
✔ |
✔ |
✔ |
✔ |
Consulte as notas de uso: |
Vetores de exclusão |
✔ |
✔ |
✔ |
N/A |
Atualmente em versão preliminar pública. |
Clustering |
❌ |
❌ |
❌ |
❌ |
|
Evolução da partição |
❌ |
Suporte limitado |
Suporte limitado |
Suporte limitado |
Oferecemos suporte à evolução da partição se ela for criada por um mecanismo externo. |
Transformações de partição |
✔ |
✔ |
✔ |
✔ |
Para as transformações de partição compatíveis, consulte: |
Exclusões posicionais |
✔ |
✔ |
✔ |
✔ |
|
Snowpipe |
Suporte limitado |
Suporte limitado |
Suporte limitado |
Suporte limitado |
|
Snowpipe Streaming |
❌ |
❌ |
❌ |
❌ |
|
Classificação dentro das partições |
❌ |
❌ |
❌ |
❌ |
|
TARGET_FILE_SIZE |
✔ |
✔ |
✔ |
✔ |
Considerações sobre particionamento¶
Considere o seguinte antes de usar gravações particionadas para tabelas Iceberg:
Se você usar um mecanismo externo para adicionar, excluir ou substituir um campo de partição em uma tabela gerenciada externamente, o Snowflake gravará os dados de acordo com a especificação de partição mais recente.
A função GET_DDL não inclui a cláusula PARTITION BY em sua saída.
A soma dos tamanhos das saídas de todas as transformações de partição não pode exceder 1.024 bytes para uma única linha.
Como a evolução de partição não é compatível com tabelas gerenciadas pelo Snowflake, descarte a tabela e crie outra com particionamento.
Os parâmetros de transformação de partição DAY(), MONTH() e YEAR(), que você especifica dentro da cláusula PARTITION BY nas propriedades de tabela, fazem parte da especificação Iceberg. Por vários dias, meses ou anos, o parâmetro de expressão de partição retorna uma partição para cada dia, mês ou ano do calendário. Por exemplo, quando a transformação DAY() é usada em uma coluna de carimbo de data/hora que tem 2 meses de dados, 61 partições são criadas.
Em comparação, as funções DAY(), MONTH() e YEAR() no Snowflake são parte do padrão SQL. Para vários dias, meses ou anos, essas funções extraem a parte do dia, mês ou ano correspondente de uma data ou carimbo de data/hora. Por exemplo, quando a função DAY() é usada em uma coluna de carimbo de data/hora com vários meses de dados, essa função retorna um dia do mês que varia de 1 a 31.
Você não pode usar o comando ALTER ICEBERG TABLE para modificar a propriedade PATH_LAYOUT de uma tabela existente.
Para particionamento com caminhos hierárquicos:
Para valores
float, o Snowflake e mecanismos externos podem se comportar de maneira diferente.O Snowflake não consegue garantir que os caminhos que ele grava correspondam aos caminhos que os mecanismos de consulta externos gravam.
O Snowflake não garante isso porque, quando um mecanismo de consulta grava um caminho hierárquico, ele precisa serializar os valores em uma cadeia de caracteres e inserir o valor resultante no caminho. A especificação da tabela Apache Iceberg não define um método de serialização padrão; portanto, diferentes mecanismos podem implementar métodos diferentes.
Por exemplo, o Snowflake não codifica o caractere
~, mas o Apache Spark™ o codifica como%7E.O Snowflake sempre grava os caminhos hierárquicos diretamente no diretório
/datado seu armazenamento em nuvem externo.
Time Travel¶
Com o Snowflake Time Travel, você pode usar o Snowflake para consultar dados históricos de uma tabela.
Você também pode usar um mecanismo de computação de terceiros para executar consultas de Time Travel em tabelas gerenciadas pelo Snowflake quando você usa Sincronizar uma tabela gerenciada pelo Snowflake com Snowflake Open Catalog ou ao usar o SDK do catálogo Snowflake.
Você pode consultar quaisquer snapshots que foram confirmados dentro do período de retenção de dados. Para especificar o período de retenção de dados, defina o parâmetro do objeto DATA_RETENTION_TIME_IN_DAYS.
Quando você exclui dados de tabela ou descarta uma tabela, o Snowflake exclui objetos após o período de retenção da tabela expirar. Isso pode gerar custos com seu provedor de armazenamento em nuvem por mais tempo do que a vida útil da tabela.