Gerenciar tabelas Apache Iceberg™¶
Gerenciar Tabelas Apache Iceberg™ no Snowflake:
Você também pode converter uma tabela Iceberg que usa um catálogo externo em uma tabela que use Snowflake como catálogo Iceberg. Para saber mais, consulte Converter uma tabela Apache Iceberg™ para usar o Snowflake como catálogo.
Consulta a uma tabela¶
Para consultar uma tabela Iceberg, um usuário deve receber ou herdar os seguintes privilégios:
O privilégio USAGE no banco de dados e no esquema com a tabela
O privilégio SELECT na tabela
Você pode consultar uma tabela Iceberg usando uma instrução SELECT. Por exemplo:
SELECT col1, col2 FROM my_iceberg_table;
Nota
Along with Snowflake, you can also use an external query engine to query Iceberg tables. For more information, see Use an external query engine with Apache Iceberg™ tables.
Usar comandos DML¶
As tabelas Iceberg que usam o Snowflake como catálogo oferecem suporte Comandos de linguagem de manipulação de dados (DML) completo, incluindo o seguinte:
As tabelas gerenciadas pelo Snowflake também oferecem suporte ao carregamento em massa eficiente usando recursos como COPY INTO <tabela> e Snowpipe. Para obter mais informações, consulte Carregamento dados nas tabelas do Apache Iceberg™.
Nota
Snowflake also supports writing to externally managed Iceberg tables. For more information, see Suporte de gravação para tabelas Apache Iceberg™ gerenciadas externamente and Gravação em tabelas Iceberg gerenciadas externamente.
For Snowflake-managed Iceberg tables, if a DML operation fails unexpectedly and rolls back, some Parquet files might get written to your external cloud storage but won’t be tracked or referenced by your Iceberg table metadata. These Parquet files are orphan files.
If you see a mismatch between storage usage for your external cloud storage and Snowflake, you might have orphan files in your external cloud storage. To see your storage usage for Snowflake, you can use the Exibição TABLE_STORAGE_METRICS or Exibição TABLE_STORAGE_METRICS. If you see a mismatch, contact Snowflake Support for assistance with determining whether you have orphan files and removing them.
Exemplo: atualizar uma tabela¶
Você pode usar instruções INSERT e UPDATE para modificar tabelas Iceberg gerenciadas pelo Snowflake.
O exemplo a seguir insere um novo valor em uma tabela Iceberg chamada store_sales e atualiza a coluna cola para 1 se o valor for atualmente -99.
INSERT INTO store_sales VALUES (-99);
UPDATE store_sales
SET cola = 1
WHERE cola = -99;
Geração de instantâneos de alterações de DML¶
Para tabelas que usam Snowflake como catálogo, o Snowflake gera automaticamente os metadados do Iceberg. O Snowflake grava os metadados em uma pasta chamada metadata em seu volume externo. Para localizar a pasta metadata, consulte Diretórios de dados e metadados.
Como alternativa, você pode chamar a função SYSTEM$GET_ICEBERG_TABLE_INFORMATION para gerar metadados do Iceberg para quaisquer novas alterações.
Para tabelas que não são gerenciadas pelo Snowflake, a função retorna informações sobre o instantâneo atualizado mais recente.
Por exemplo:
SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
Saída:
+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1') |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"} |
+-----------------------------------------------------------------------------------------------------------+
Use as exclusões em nível de linha¶
Nota
Compatível apenas para tabelas Iceberg gerenciadas externamente.
O Snowflake oferece suporte à consulta de tabelas com exclusões em nível de linha e à gravação em tabelas usando exclusões em nível de linha.
Consultar tabelas¶
O Snowflake oferece suporte à consulta de tabelas Iceberg gerenciadas externamente quando você tiver configurado as exclusões em nível de linha para operações de atualização, exclusão e mesclagem.
Para configurar as exclusões em nível de linha, consulte Propriedades de gravação na documentação do Apache Iceberg.
Gravar em tabelas¶
O Snowflake oferece suporte a exclusões em nível de linha de posição para gravação em tabelas Iceberg gerenciadas externamente e armazenadas no Amazon S3, Azure ou Google Cloud. Para desativar as exclusões de posição, que permitem a execução das operações DML no modo de cópia na gravação, defina o parâmetro ENABLE_ICEBERG_MERGE_ON_READ como FALSE no nível da tabela, do esquema ou do banco de dados.
Cópia na gravação vs. fusão na leitura¶
O Iceberg oferece dois modos para configurar como os mecanismos de computação lidam com operações em nível de linha para tabelas gerenciadas externamente. O Snowflake oferece suporte a esses dois modos.
A tabela a seguir descreve quando você pode querer usar cada modo:
Modo |
Descrição |
|---|---|
Cópia na gravação (padrão) |
Esse modo prioriza o tempo de leitura e afeta a velocidade de gravação. Quando você executa uma operação de atualização, exclusão ou fusão, o mecanismo de computação reescreve todo o arquivo de dados Parquet afetado. Isso pode resultar em gravações lentas, especialmente se você tiver arquivos de dados grandes, mas não afeta o tempo de leitura. Esse é o modo padrão. |
Fusão na leitura |
Esse modo prioriza a velocidade de gravação e afeta ligeiramente o tempo de leitura. Quando você executa uma operação de atualização, exclusão ou fusão, o mecanismo de computação cria um arquivo de exclusão que contém informações apenas sobre as linhas alteradas. Quando você lê a partir de uma tabela, o mecanismo de consulta mescla os arquivos de exclusão com os arquivos de dados. A fusão pode aumentar o tempo de leitura. No entanto, você pode otimizar o desempenho da leitura programando a compactação regular e a manutenção da tabela. |
Para obter mais informações sobre alterações em nível de linha no Iceberg, consulte Exclusões em nível de linha na documentação do Apache Iceberg.
Considerações e limitações¶
Considere o seguinte ao usar exclusões em nível de linha com tabelas Iceberg gerenciadas externamente:
O Snowflake apenas oferece suporte à exclusão por posição.
Para obter o melhor desempenho de leitura ao usar exclusões em nível de linha, execute a compactação regular e a manutenção da tabela para remover arquivos de exclusão antigos. Para obter mais informações, consulte Manter tabelas que usam um catálogo externo.
Exclusões de posição excessivas, especialmente exclusões de posição pendentes, podem impedir operações de criação e atualização de tabelas. Para evitar esse problema, execute a manutenção da tabela para remover exclusões de posição extras.
O método de manutenção de tabela a ser usado depende do seu mecanismo Iceberg externo. Por exemplo, você pode usar o método
rewrite_data_filespara Spark com as opçõesdelete-file-thresholdourewrite-all. Para obter mais informações, consulte rewrite_data_files na documentação Apache Iceberg™.
Definir um tamanho de arquivo de destino¶
Para melhorar o desempenho das consultas para mecanismos Iceberg externos, como Spark ou Trino, você pode configurar um tamanho de arquivo de destino para tabelas Iceberg gerenciadas pelo Snowflake e externamente com suporte para gravação. Você pode definir um tamanho específico (16MB, 32MB, 64MB ou 128MB) ou usar a opção AUTO. AUTO funciona de modo diferente, dependendo do tipo de tabela:
Tabelas gerenciadas pelo Snowflake: AUTO especifica que o Snowflake deve escolher o tamanho do arquivo para a tabela com base em características da tabela, como tamanho, DML padrões, carga de trabalho de ingestão e configuração de cluster. O Snowflake ajusta automaticamente o tamanho do arquivo, começando em 16 MB, para melhor desempenho de leitura e gravação no Snowflake.
Tabelas gerenciadas externamente: AUTO especifica que o Snowflake deve escalar agressivamente para um tamanho de arquivo maior.
Você pode definir o tamanho do arquivo de destino ao criar uma tabela Iceberg ou executar o comando ALTER ICEBERG TABLE para alterar o tamanho do arquivo de destino para uma tabela Iceberg existente. O Snowflake tenta manter os tamanhos dos arquivos próximos ao tamanho de destino ao gravar arquivos Parquet para uma tabela.
Após definir um tamanho de arquivo de destino, o Snowflake começa imediatamente a criar arquivos maiores para novas operações da linguagem de manipulação de dados (DML). As operações de manutenção de tabelas do Snowflake alteram assincronamente os arquivos de tabela existentes de acordo com o tamanho do arquivo de destino.
O exemplo a seguir usa TARGET_FILE_SIZE para definir um tamanho de arquivo de destino de 128 MB para uma tabela gerenciada pelo Snowflake:
CREATE ICEBERG TABLE my_iceberg_table (col1 INT)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table'
TARGET_FILE_SIZE = '128MB';
Como alternativa, use ALTER ICEBERG TABLE para definir a propriedade TARGET_FILE_SIZE para uma tabela existente:
ALTER ICEBERG TABLE my_iceberg_table
SET TARGET_FILE_SIZE = '32MB';
Para verificar o valor da propriedade TARGET_FILE_SIZE de uma tabela, use o comando SHOW PARAMETERS:
SHOW PARAMETERS LIKE 'target_file_size' FOR my_iceberg_table;
Otimização para tabelas Iceberg gerenciadas pelo Snowflake¶
A otimização de tabelas realiza automaticamente a manutenção para melhorar o desempenho e reduzir os custos de armazenamento das tabelas Iceberg gerenciadas pelo Snowflake.
Nota
Snowflake doesn’t support orphan file deletion for Snowflake-managed Iceberg tables. If you see a mismatch between storage usage for your external cloud storage and Snowflake, you might have orphan files in your external cloud storage. To see your storage usage for Snowflake, you can use the Exibição TABLE_STORAGE_METRICS or Exibição TABLE_STORAGE_METRICS. If you see a mismatch, contact Snowflake Support for assistance with determining whether you have orphan files and removing them.
Para melhorar o desempenho da consulta, você também pode definir um tamanho de arquivo de destino. Para obter mais informações, consulte Definir um tamanho de arquivo de destino.
O Snowflake oferece suporte aos recursos de otimização de tabela Iceberg resumidos a seguir:
Recurso |
Melhora o desempenho da consulta |
Reduz os custos de armazenamento |
Notas |
|---|---|---|---|
✔ |
✔ |
|
|
✔ |
✔ |
|
|
✔ |
✔ |
|
|
✔ |
✔ |
|
[1] Ao contrário dos outros recursos de otimização de tabela, o clustering automático é faturado separadamente como um recurso autônomo.
Clustering automático¶
O clustering automático reorganiza os dados em arquivos ou partições com base nas colunas consultadas com frequência. O tamanho do arquivo para tabelas Iceberg é baseado na sua configuração de clustering, a menos que você defina um tamanho de arquivo de destino. Se fizer isso, o tamanho do arquivo será o tamanho definido por você. Para obter mais informações, consulte Definir um tamanho de arquivo de destino.
Para definir o Clustering automático, especifique o parâmetro CLUSTER BY ao criar uma tabela Iceberg gerenciada pelo Snowflake ou modificar uma tabela que já existe. Para obter mais informações, consulte:
Para mais informações sobre clustering automático, consulte Clustering automático.
Compactação de dados¶
A compactação de dados combina arquivos pequenos em arquivos maiores e mais eficientes. Isso ajuda a gerenciar o armazenamento, manter um tamanho de arquivo ideal e melhorar o desempenho da consulta.
Na maioria dos casos, a compactação de dados não tem um efeito significativo nos custos de computação. No entanto, se isso for uma preocupação, você pode desativar a compactação. Por exemplo, você pode desabilitar a compactação em uma tabela que é consultada raramente. Para desabilitar ou habilitar a compactação de dados, consulte Definir compactação de dados.
Nota
Para consultar trabalhos de compactação de dados para tabelas Iceberg, consulte Exibição ICEBERG_STORAGE_OPTIMIZATION_HISTORY. Esta exibição inclui o número de créditos faturados para compactação de dados.
Se Clustering automático estiver ativado, o clustering executará a compactação de dados na tabela. Isso é válido independentemente de a compactação de dados estar ativada ou desativada na tabela.
Você também tem a opção de definir um tamanho de arquivo de destino. Para obter mais informações, consulte Definir um tamanho de arquivo de destino.
Compactação de manifestos¶
A compactação de manifestos otimiza a camada de metadados reorganizando e combinando arquivos de manifesto menores. Essa compactação reduz a sobrecarga de metadados e melhora o desempenho das consultas.
Este recurso é habilitado automaticamente e não pode ser desativado.
Expiração de instantâneos¶
A expiração de instantâneos exclui sistematicamente instantâneos antigos e seus dados e arquivos de metadados exclusivos do histórico da tabela. Essa exclusão é baseada em políticas de retenção predefinidas.
Este recurso é habilitado automaticamente e não pode ser desativado.
Manter tabelas que usam um catálogo externo¶
Você pode executar operações de manutenção em tabelas Iceberg que usam um catálogo externo.
As operações de manutenção incluem as seguintes:
Instantâneos expirados
Remoção de arquivos de metadados antigos
Compactação de arquivos de dados
Importante
Para manter sua tabela Iceberg sincronizada com as alterações externas, é importante alinhar seu cronograma de atualização do Snowflake com a manutenção da tabela. Atualize a tabela toda vez que você realizar uma operação de manutenção.
Para saber mais sobre a manutenção de tabelas Iceberg que não são gerenciadas pelo Snowflake, consulte Manutenção na documentação do Apache Iceberg.
Atualização dos metadados da tabela¶
Ao usar um catálogo Iceberg externo, você pode atualizar os metadados da tabela usando o comando ALTER ICEBERG TABLE … REFRESH. A atualização dos metadados da tabela sincroniza os metadados com as alterações mais recentes da tabela.
Nota
Recomendamos que você configure a atualização automática para tabelas gerenciadas externamente com suporte.
Atualizar os metadados de uma tabela¶
O exemplo a seguir atualiza manualmente os metadados de uma tabela que usa um catálogo externo (por exemplo, AWS Glue ou Delta). A atualização da tabela mantém a tabela sincronizada com quaisquer alterações ocorridas no catálogo remoto.
Com esse tipo de tabela Iceberg, você não precisa especificar um caminho de arquivo de metadados no comando.
ALTER ICEBERG TABLE my_iceberg_table REFRESH;
Para manter uma tabela atualizada automaticamente, você pode configurar a atualização automática. Use o comando ALTER ICEBERG TABLE.
Por exemplo:
ALTER ICEBERG TABLE my_iceberg_table SET AUTO_REFRESH = TRUE;
Atualizar os metadados de uma tabela criada a partir de arquivos Iceberg¶
O exemplo a seguir atualiza manualmente uma tabela criada a partir de arquivos de metadados Iceberg em um local de armazenamento em nuvem externo, especificando o caminho relativo para um arquivo de metadados sem a barra (/) no início. O arquivo de metadados define os dados na tabela após a atualização.
ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
Recuperar métricas de armazenamento¶
Snowflake não cobra de sua conta os custos de armazenamento da tabela Iceberg. No entanto, você pode acompanhar quanto armazenamento uma tabela Iceberg ocupa consultando as exibições TABLE_STORAGE_METRICS e TABLES no esquema Snowflake Information Schema ou Account Usage.
O exemplo de consulta a seguir une a exibição ACCOUNT_USAGE.TABLE_STORAGE_METRICS à exibição ACCOUNT_USAGE.TABLES, filtrando na coluna TABLES.IS_ICEBERG.
SELECT metrics.* FROM
snowflake.account_usage.table_storage_metrics metrics
INNER JOIN snowflake.account_usage.tables tables
ON (
metrics.id = tables.table_id
AND metrics.table_schema_id = tables.table_schema_id
AND metrics.table_catalog_id = tables.table_catalog_id
)
WHERE tables.is_iceberg='YES';
Definir compactação de dados¶
Você pode definir a compactação de dados em tabelas do Iceberg gerenciadas pelo Snowflake ao criar um banco de dados, esquema ou tabela, ou executar o comando ALTER para alterar a configuração de um banco de dados, esquema ou tabela existente. Você também pode definir a compactação de dados no nível da conta usando o comando ALTER ACCOUNT. Para mais informações sobre compactação de dados, consulte Compactação de dados.
O exemplo a seguir usa ENABLE_DATA_COMPACTION para desativar a compactação de dados para uma tabela gerenciada pelo Snowflake:
CREATE ICEBERG TABLE my_iceberg_table (col1 INT)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table'
ENABLE_DATA_COMPACTION = FALSE;
Como alternativa, use ALTER ICEBERG TABLE para desabilitá-la para uma tabela existente.
ALTER ICEBERG TABLE my_iceberg_table
SET ENABLE_DATA_COMPACTION = FALSE;
Para obter mais informações, consulte: