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¶
O particionamento “oculto” para Apache Iceberg™ é baseado em metadados e é adaptável. O Iceberg produz valores de partição com base nas transformações que você define ao criar uma tabela. Ao lerem uma tabela particionada, os mecanismos Iceberg utilizam os valores de partição definidos nos metadados da tabela para identificar de forma eficiente os dados relevantes.
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.
Para criar uma tabela Iceberg particionada, inclua a cláusula PARTITION BY com uma ou mais transformações de partição em sua instrução CREATE ICEBERG TABLE regular. Para obter um exemplo, consulte Criar uma tabela Iceberg em um banco de dados vinculado a catálogo.
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.
Nota
A versão 3 da especificação Apache Iceberg não é compatível com o uso de particionamento.
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 |
|
Clustering |
❌ |
❌ |
❌ |
❌ |
|
TARGET_FILE_SIZE |
❌ |
❌ |
❌ |
❌ |
As partições são escritas em um tamanho de arquivo de 16 MB. |
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 |
❌ |
❌ |
❌ |
N/A |
|
Snowpipe |
❌ |
❌ |
❌ |
❌ |
|
Snowpipe Streaming |
❌ |
❌ |
❌ |
❌ |
|
Classificação dentro das partições |
❌ |
❌ |
❌ |
❌ |
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.
O Snowflake usa um tamanho de arquivo de destino de 16 MB para tabelas particionadas. Se o tamanho do arquivo padrão for maior, o Snowflake diminuirá automaticamente o tamanho de destino para 16 MB quando você gravar em uma tabela particionada.
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.
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.