Tabelas Apache Iceberg™¶
As tabelas Apache Iceberg™ do Snowflake combinam o desempenho e a semântica de consulta das tabelas típicas do Snowflake com o armazenamento em nuvem externo que você gerencia. Elas são ideais para data lakes existentes que você não pode ou optou por não armazenar no Snowflake.
As tabelas Iceberg usam a especificação de formato aberto de tabela Apache Iceberg™, que fornece uma camada de abstração em arquivos de dados armazenados em formatos abertos e oferece suporte a recursos como:
Transações ACID (atomicidade, consistência, isolamento, durabilidade)
Evolução do esquema
Particionamento oculto
Instantâneos de tabela
O Snowflake aceita tabelas Iceberg que usam o formato de arquivo Apache Parquet™.
Introdução¶
Para começar com as tabelas Iceberg, consulte Tutorial: Crie sua primeira tabela Apache Iceberg™.
Como funciona¶
Esta seção fornece informações específicas para trabalhar com tabelas Iceberg no Snowflake. Para saber mais sobre a especificação do formato da tabela Iceberg, consulte a documentação oficial do Apache Iceberg e as Especificações da tabela Iceberg.
Armazenamento de dados¶
As tabelas Iceberg armazenam seus dados e arquivos de metadados em um local de armazenamento em nuvem externo (Amazon S3, Google Cloud Storage ou Azure Storage). O armazenamento externo não faz parte do Snowflake. Você é responsável por todo o gerenciamento do local de armazenamento em nuvem externo, incluindo a configuração da proteção e recuperação de dados. O Snowflake não fornece armazenamento Fail-safe para tabelas Iceberg.
O Snowflake se conecta ao seu local de armazenamento usando um volume externo, e as tabelas Iceberg não incorrem em custos de armazenamento Snowflake. Para obter mais informações, consulte Faturamento.
Para saber mais sobre armazenamento para tabelas Iceberg, consulte Armazenamento para tabelas Apache Iceberg™.
Volume externo¶
Um volume externo é um objeto Snowflake nomeado ao nível de conta, que você usa para conectar o Snowflake ao seu armazenamento em nuvem externo para tabelas Iceberg. Um volume externo armazena uma entidade de gerenciamento de identidade e acesso (IAM) para seu local de armazenamento. O Snowflake usa a entidade de IAM para se conectar com segurança ao seu armazenamento e acessar dados de tabela, metadados Iceberg e arquivos de manifesto que armazenam o esquema de tabela, partições e outros metadados.
Um único volume externo pode oferecer suporte a uma ou mais tabelas Iceberg.
Para configurar um volume externo para tabelas Iceberg, consulte Configuração de um volume externo.
Catálogo¶
Um catálogo Iceberg permite que um mecanismo de computação gerencie e carregue tabelas Iceberg. O catálogo forma a primeira camada de arquitetura na especificação da tabela Iceberg e deve oferecer suporte ao seguinte:
Armazenar o ponteiro de metadados atual para uma ou mais tabelas Iceberg. Um ponteiro de metadados mapeia o nome de uma tabela para o local do arquivo de metadados atual dessa tabela.
Executar operações atômicas para que você possa atualizar o ponteiro de metadados atual de uma tabela.
Para saber mais sobre os catálogos Iceberg, consulte a documentação do Apache Iceberg.
O Snowflake oferece suporte a diferentes opções de catálogo. Por exemplo, você pode usar o Snowflake como o catálogo Iceberg ou usar uma integração de catálogo para conectar o Snowflake a um catálogo Iceberg externo.
Integração de catálogo¶
Uma integração de catálogo é um objeto Snowflake nomeado no nível de conta que armazena informações sobre como os metadados da tabela são organizados para os seguintes cenários:
Quando você não usa o Snowflake como catálogo Iceberg. Por exemplo, você precisa de uma integração de catálogo, se sua tabela for gerenciada pelo AWS Glue.
Quando você deseja fazer a integração ao Snowflake Open Catalog para:
Consultar uma tabela Iceberg no Snowflake Open Catalog usando Snowflake.
Sincronizar uma tabela Iceberg gerenciada pelo Snowflake com o Snowflake Open Catalog para que mecanismos de computação de terceiros possam consulta a tabela.
Uma única integração de catálogo pode oferecer suporte a uma ou mais tabelas Iceberg que usam o mesmo catálogo externo.
Para configurar uma integração de catálogo, consulte Configurar uma integração de catálogo.
Metadados e instantâneos¶
Iceberg usa um modelo de consulta baseado em instantâneo, onde os arquivos de dados são mapeados usando arquivos de manifesto e metadados. Um instantâneo representa o estado de uma tabela em um determinado momento e é usado para acessar o conjunto completo de arquivos de dados na tabela.
Para saber mais sobre metadados da tabela e suporte a Time Travel, consulte Metadados e retenção para tabelas Apache Iceberg™.
Suporte entre nuvens/entre regiões¶
O suporte entre nuvens/entre regiões depende do tipo de tabela Iceberg.
Tipo de tabela |
Suporte entre nuvens/entre regiões |
Notas |
---|---|---|
Tabelas que usam um catálogo externo com uma integração de catálogo |
✔ |
Se o local de armazenamento ativo do seu volume externo não estiver no mesmo provedor de nuvem ou na mesma região da sua conta Snowflake, as seguintes limitações serão aplicadas:
Se sua conta Snowflake e seu volume externo estiverem em regiões diferentes, sua conta externa de armazenamento em nuvem incorrerá em custos de saída quando você consultar a tabela. |
Tabelas que usam o Snowflake como o catálogo |
❌ |
Seu volume externo deve usar um local de armazenamento ativo com o mesmo provedor de nuvem (na mesma região) que hospeda sua conta Snowflake. Se o local ativo não estiver na mesma região, a instrução CREATE ICEBERG TABLE retornará um erro do usuário. |
Faturamento¶
O Snowflake fatura sua conta pelo uso do warehouse virtual (computação) e pelos serviços de nuvem quando você trabalha com tabelas Iceberg. A Snowflake também cobra sua conta se você usar atualização automática.
A Snowflake não fatura sua conta pelo seguinte:
Custos de armazenamento da tabela Iceberg. Seu provedor de armazenamento em nuvem faz a cobrança diretamente pelo uso do armazenamento de dados.
Bytes ativos usados pelas tabelas Iceberg. No entanto, as exibições INFORMATION_SCHEMA TABLE_STORAGE_METRICS e ACCOUNT_USAGE TABLE_STORAGE_METRICS exibem ACTIVE_BYTES para tabelas Iceberg para ajudar você a monitorar quanto armazenamento uma tabela ocupa. Para visualizar um exemplo, consulte Recuperar métricas de armazenamento.
Nota
Se sua conta Snowflake e seu volume externo estiverem em regiões diferentes, sua conta externa de armazenamento em nuvem incorrerá em custos de saída quando você consultar a tabela.
Opções de catálogo¶
O Snowflake oferece suporte às seguintes opções de catálogo Iceberg:
Uso do Snowflake como o catálogo Iceberg
Usar um catálogo externo do Iceberg
A tabela a seguir resume as diferenças entre essas opções de catálogo.
Acesso de leitura |
✔ |
✔ |
Acesso de gravação |
✔ |
❌ Para suporte à plataforma Snowflake, você pode converter a tabela para usar o Snowflake como catálogo. |
Armazenamento de dados e metadados |
Volume externo (armazenamento em nuvem) |
Volume externo (armazenamento em nuvem) |
Suporte à plataforma Snowflake |
✔ |
❌ |
Integra-se com o Snowflake Open Catalog |
✔ Você pode sincronizar uma tabela gerenciada pelo Snowflake com o Open Catalog para consulta uma tabela usando outros mecanismos de computação. |
✔ Você pode usar o Snowflake para consultar tabelas Iceberg gerenciadas pelo Open Catalog. |
Funciona com o SDK do catálogo Snowflake |
✔ |
✔ |
Usar o Snowflake como catálogo¶
Uma tabela Iceberg que usa Snowflake como catálogo Iceberg fornece suporte completo à plataforma Snowflake com acesso de leitura e gravação. Os dados e metadados da tabela são armazenados em armazenamento em nuvem externo, que o Snowflake acessa usando um volume externo. Snowflake cuida de toda a manutenção do ciclo de vida, como compactação, da tabela.
Use um catálogo externo¶
Uma tabela Iceberg que use um catálogo externo oferece suporte limitado à plataforma Snowflake com acesso somente leitura. Com esse tipo de tabela, o Snowflake usa uma integração de catálogo para recuperar informações sobre os metadados e o esquema Iceberg.
Você pode usar essa opção para criar uma tabela Iceberg para as seguintes fontes:
Catálogo de dados do AWS Glue
Arquivos de metadados do Iceberg no armazenamento de objetos
Arquivos de tabela delta no armazenamento de objetos
Open Catalog
Catálogo REST remoto Iceberg
Snowflake não assume nenhum gerenciamento de ciclo de vida.
Os dados e metadados da tabela são armazenados em armazenamento em nuvem externo, que o Snowflake acessa usando um volume externo.
O diagrama a seguir mostra como uma tabela Iceberg usa uma integração de catálogo com um catálogo Iceberg externo.
Considerações e limitações¶
As seguintes considerações e limitações se aplicam às tabelas Iceberg e estão sujeitas a alterações:
Nuvens e regiões
As tabelas Iceberg estão disponíveis para todas as contas Snowflake, em todas as plataformas de nuvem e em todas as regiões, exceto na região da China.
As tabelas entre nuvens/regiões são compatíveis quando você usa um catálogo externo. Para obter mais informações, consulte Suporte entre nuvens/entre regiões.
Iceberg
As versões 1 e 2 da especificação Apache Iceberg são suportadas, excluindo os seguintes recursos:
Exclusões em nível de linha (exclusões de posição ou exclusões de igualdade). No entanto, tabelas que usam o Snowflake como catálogo oferecem suporte a instruções DELETE do Snowflake.
Usando a
history.expire.min-snapshots-to-keep
propriedade da tabela para especificar o número mínimo padrão de instantâneos a serem mantidos. Para obter mais informações, consulte Metadados e instantâneos.O particionamento Iceberg com a função de transformação
bucket
afeta o desempenho de consultas que usam cláusulas condicionais para filtrar resultados.Para tabelas Iceberg que não são gerenciadas pelo Snowflake, esteja ciente do seguinte:
O Time Travel para qualquer instantâneo gerado após a criação da tabela é compatível, desde que você atualize periodicamente a tabela antes que o instantâneo expire.
Não há suporte para a conversão de uma tabela que tenha uma coluna de partição de identidade não materializada. Uma coluna de partição de identidade não materializada é criada quando uma tabela define uma transformação de identidade usando uma coluna de origem que não existe em um arquivo Parquet.
Formatos de arquivo
As tabelas Iceberg são compatíveis com arquivos Apache Parquet.
Arquivos Parquet que usam o tipo lógico inteiro não assinado não são aceitos.
Volumes externos
Você não pode acessar os locais de armazenamento em nuvem em volumes externos usando uma integração de armazenamento.
Você deve configurar uma relação de confiança separado para cada volume externo que criar.
Arquivos de metadados
Os arquivos de metadados não identificam o instantâneo mais recente de uma tabela Iceberg.
Você não pode modificar o local dos arquivos de dados ou instantâneos usando o comando ALTER ICEBERG TABLE. Para modificar qualquer uma dessas configurações, você deve recriar a tabela (usando a sintaxe CREATE OR REPLACE ICEBERG TABLE).
Para tabelas que usam um catálogo externo:
Certifique-se de que os arquivos de manifesto não contenham duplicatas. Se houver arquivos duplicados no mesmo instantâneo, o Snowflake retornará um erro que inclui o caminho do arquivo duplicado.
Não é possível criar uma tabela se os metadados Parquet contiverem caracteres UTF-8 inválidos. Certifique-se de que seus metadados Parquet sejam compatíveis com UTF-8.
O Snowflake detecta corrupções e inconsistências nos metadados do Parquet produzidos fora do Snowflake e revela problemas por meio de mensagens de erro.
É possível criar, atualizar ou consultar tabelas gerenciadas externamente (ou convertidas), mesmo que os metadados da tabela sejam inconsistentes. Ao escrever dados Iceberg, certifique-se de que as estatísticas de metadados da tabela (por exemplo,
RowCount
ouNullCount
) correspondam ao conteúdo dos dados.Para tabelas que usam o Snowflake como catálogo, o Snowflake processa instruções DDL individualmente e produz metadados de uma maneira que pode ser diferente de outros catálogos. Para obter mais informações, consulte Instruções DDL.
Clustering
O suporte ao clustering depende do tipo de tabela Iceberg.
Tipo de tabela
Notas
Tabelas que usam Snowflake como catálogo Iceberg
Defina uma chave de clustering usando o comando CREATE ICEBERG TABLE ou ALTER ICEBERG TABLE. Para definir ou gerenciar uma chave de clustering, consulte CREATE ICEBERG TABLE (Snowflake como o catálogo Iceberg) e ALTER ICEBERG TABLE.
Tabelas que usam um catálogo externo
Clustering não é suportado.
Tabelas convertidas
O Snowflake apenas clusteriza arquivos se eles tiverem sido criados após a conversão da tabela ou se os arquivos tiverem sido modificados usando uma instrução DML.
Delta
Os fluxos Snowflake não são compatíveis com tabelas Iceberg criadas a partir de arquivos de tabela Delta com colunas de partição. No entanto, os fluxos apenas de inserção para tabelas criadas a partir de arquivos Delta sem colunas de partição são compatíveis.
Tabelas dinâmicas não são compatíveis com tabelas Iceberg criadas a partir de arquivos de tabela Delta.
Snowflake não oferece suporte à criação de tabelas Iceberg a partir de definições de tabela Delta no AWS Glue Data Catalog.
Arquivos Parquet (arquivos de dados para tabelas Delta) que usam qualquer um dos seguintes recursos ou tipos de dados não são compatíveis:
Campo IDs.
O tipo de dados INTERVAL.
O tipo de dados DECIMAL com precisão maior que 38.
Os tipos LIST ou MAP com representação de um ou dois níveis.
Tipos inteiros sem sinal (INT(signed = false)).
O tipo de dados FLOAT16.
Para obter mais informações sobre os tipos de dados Delta e tabelas Iceberg, consulte Tipos de dados Delta.
As operações de atualização durante CREATE e ALTER … REFRESH podem processar no máximo 1.000 arquivos de confirmação Delta por operação.
Nota
O Snowflake usa arquivos de ponto de verificação Delta ao criar uma tabela Iceberg. O limite de 1.000 arquivo de confirmação se aplica somente a confirmações após o último ponto de verificação.
Não há suporte para gerar metadados do Iceberg usando a função SYSTEM$GET_ICEBERG_TABLE_INFORMATION.
Os seguintes recursos do Delta Lake não são compatíveis no momento: rastreamento de linhas, arquivos vetoriais de exclusão, arquivos de dados de alteração, metadados de alteração, DataChange, CDC e evolução de protocolo.
Atualização automática
Quando a atualização automática está habilitada, você não pode atualizar manualmente os metadados da tabela. Para executar uma atualização manual, primeiro desative a atualização automática.
Para integrações de catálogo criadas antes do Snowflake versão 8.22, você deve definir manualmente o parâmetro
REFRESH_INTERVAL_SECONDS
antes de habilitar a atualização automática em tabelas que dependem dessa integração de catálogo. Para obter instruções, consulte ALTER CATALOG INTEGRATION … SET AUTO_REFRESH.Certifique-se de que o novo snapshot da tabela seja um objeto secundário direto do snapshot da tabela atual. Caso contrário, a atualização automatizada entra no estado
STOPPED
. Para recuperar a atualização automatizada quando isso ocorrer, consulte Recuperação de erros.
Se sua tabela estiver vazia, execute uma atualização manual antes de habilitar a atualização automática para evitar comportamento indefinido.
A atualização automatizada não é aceita quando você usa uma integração de catálogo para armazenamento de objeto.
Manifestos da versão 1 do Iceberg sem uma coluna de número de sequência não são aceitos no momento.
Acesso de clientes terceiros aos dados e metadados do Iceberg
Clientes de terceiros não podem anexar, excluir ou atualizar dados em tabelas Iceberg que usam o Snowflake como catálogo.
Recursos não compatíveis
Os seguintes recursos do Snowflake não são aceitos atualmente para todas as tabelas Iceberg:
Os seguintes drivers:
Listagens que permitem o Preenchimento automático entre nuvens
Replicação de de tabelas Iceberg, volumes externos ou integrações de catálogo.
Criptografia do Snowflake
Snowflake Connector para Kafka Connector com Snowpipe Streaming
SDK de ingestão do Snowflake
Snowpipe Streaming API
Uso de tags usando o procedimento armazenado ASSOCIATE_SEMANTIC_CATEGORY_TAGS
Os seguintes recursos não são aceitos para tabelas Iceberg que usam um catálogo externo:
Fluxos padrão e apenas para anexação. Fluxos apenas de inserção são aceitos.