Armazenamento para tabelas Apache Iceberg™¶
As tabelas Snowflake normalmente usam armazenamento gerenciado pelo Snowflake. Por outro lado, as tabelas Apache Iceberg™ no Snowflake usam o armazenamento externo que você configura e mantém.
Este tópico fornece informações conceituais e práticas recomendadas para armazenamento de tabelas Iceberg.
Concessão de acesso do Snowflake ao seu armazenamento¶
Para conceder ao Snowflake acesso aos seus locais de armazenamento para tabelas Iceberg, use o serviço de gerenciamento de identidade e acesso de seu provedor de nuvem. Você concede a uma identidade, ou entidade, acesso limitado ao seu armazenamento sem trocar os segredos. Este é o mesmo modelo de acesso que a Snowflake usa para outras integrações, incluindo integrações de armazenamento.
O Snowflake fornece uma entidade para toda a sua conta Snowflake quando você cria um volume externo. A entidade é a seguinte, dependendo de seu provedor de nuvem:
Provedor de nuvem |
Entidade provisionada pelo Snowflake |
---|---|
Amazon Web Services (AWS) |
|
Google Cloud |
|
Azure |
O Snowflake autentica diretamente com seu provedor de armazenamento, e a entidade provisionada pelo Snowflake assume uma função que você especifica. A função deve ter permissão para executar operações em seu local de armazenamento. Por exemplo, o Snowflake pode ler de um local de armazenamento somente se a função tiver permissão para ler desse local de armazenamento.
O Snowflake requer permissão para executar as seguintes ações nas tabelas Iceberg:
Tabelas gerenciadas pelo Snowflake |
Tabelas que usam um catálogo Iceberg externo |
|
---|---|---|
Amazon S3 |
|
|
Google Cloud Storage |
|
|
Armazenamento do Azure |
Todas as ações permitidas para a função Storage Blob Data Contributor |
Todas as ações permitidas para a função Storage Blob Data Reader |
Nota
A permissão s3:PutObject
concede acesso de gravação ao local do volume externo. Para configurar completamente o acesso de gravação, você deve definir o parâmetro ALLOW_WRITES
do volume externo como TRUE
(o valor padrão).
Cada volume externo é associado a um Local de armazenamento ativo específico, e um único volume externo pode oferecer suporte a várias tabelas Iceberg. No entanto, o número de volumes externos necessários depende de como você deseja armazenar, organizar e proteger os dados da sua tabela.
Você pode usar um único volume externo se quiser os dados e metadados de todas as suas tabelas Snowflake-Iceberg em subdiretórios no mesmo local de armazenamento (por exemplo, no mesmo bucket S3). Para configurar esses diretórios para tabelas gerenciadas pelo Snowflake, consulte Diretórios de dados e metadados.
Como alternativa, você pode criar vários volumes externos para proteger vários locais de armazenamento de forma diferente. Por exemplo, você pode criar os seguintes volumes externos:
Um volume externo somente leitura para tabelas Iceberg gerenciadas externamente.
Um volume externo configurado com acesso de leitura e gravação para tabelas gerenciadas pelo Snowflake.
Para obter instruções completas sobre como conceder ao Snowflake acesso ao seu armazenamento para tabelas Iceberg, consulte os seguintes tópicos:
Local de armazenamento ativo¶
Cada volume externo oferece suporte a um único local de armazenamento ativo. Se você especificar vários locais de armazenamento em uma instrução CREATE EXTERNAL VOLUME, o Snowflake atribui um local como o local ativo. A localização ativa permanece a mesma durante a vida útil do volume externo.
A atribuição ocorre na primeira vez que você usa o volume externo em uma instrução CREATE ICEBERG TABLE. Snowflake usa a seguinte lógica para escolher um local ativo:
Se a lista
STORAGE_LOCATIONS
contiver um ou mais locais de armazenamento local, o Snowflake usará o primeiro local de armazenamento local da lista. A localização do armazenamento local é aquela com o mesmo provedor de nuvem e na mesma região da sua conta Snowflake.Se a lista
STORAGE_LOCATIONS
não contiver nenhum local de armazenamento local, o Snowflake selecionará o primeiro local da lista.
Nota
As tabelas Iceberg entre nuvens/regiões são compatíveis somente quando você usa um catálogo Iceberg externo. Para obter mais informações, consulte Suporte entre nuvens/entre regiões.
Os volumes externos criados antes da versão 7.44 do Snowflake podem ter usado uma lógica diferente para selecionar um local ativo.
Verificação de acesso ao armazenamento¶
Para verificar se o Snowflake pode se autenticar com sucesso no seu provedor de armazenamento, chame a função SYSTEM$VERIFY_EXTERNAL_VOLUME.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Para tabelas gerenciadas pelo Snowflake, o Snowflake verifica automaticamente o acesso ao local de armazenamento ativo no seu volume externo nas seguintes situações:
A primeira vez que você especifica esse volume externo em uma instrução CREATE ICEBERG TABLE para uma tabela gerenciada pelo Snowflake.
A primeira vez que você converte uma tabela para usar o Snowflake como catálogo Iceberg.
A propriedade do volume externo ALLOW_WRITES
deve ser definida como TRUE
.
O Snowflake tenta as seguintes operações de armazenamento para verificar o local de armazenamento.
Escrever um arquivo de teste.
Ler o arquivo.
Listar o conteúdo do caminho do arquivo.
Excluir o arquivo.
Se alguma das operações falhar, a instrução CREATE ICEBERG TABLE (ou ALTER ICEBERG TABLE … CONVERT TO MANAGED) falha e você recebe uma mensagem de erro.
Gerenciamento de arquivos¶
Esta seção explica como funciona o gerenciamento de arquivos de tabela Iceberg no armazenamento, de acordo com o tipo de tabela Iceberg.
Tabelas gerenciadas pelo Snowflake¶
Importante
Proíba que outras ferramentas acessem para excluir ou substituir objetos associados às tabelas Iceberg gerenciadas pelo Snowflake.
Certifique-se de que entidade Snowflake mantenha acesso ao armazenamento de sua tabela. Para obter mais informações, consulte Concessão de acesso do Snowflake ao seu armazenamento.
Mesmo que você configure e gerencie locais de armazenamento para tabelas Iceberg, o Snowflake opera exclusivamente nos objetos em seu armazenamento (arquivos de dados e metadados) que pertencem às tabelas gerenciadas pelo Snowflake. O Snowflake executa manutenção periódica nesses objetos de tabela para otimizar o desempenho da consulta e limpar dados excluídos.
As consultas podem falhar se outras ferramentas excluírem ou substituírem objetos de tabela gerenciados pelo Snowflake. Da mesma forma, as consultas na tabela e as operações de manutenção de tabela do Snowflake falharão se você revogar o acesso da entidade Snowflake ao seu armazenamento.
O Snowflake exclui os objetos após o término do período de retenção da tabela, quando os dados da tabela gerenciada pelo Snowflake são excluídos ou a tabela é descartada.
Diretórios de dados e metadados¶
Para tabelas gerenciadas pelo Snowflake, o Snowflake grava arquivos de dados do Parquet e metadados de tabela nos seguintes caminhos em seu armazenamento em nuvem externo:
STORAGE_BASE_URL/BASE_LOCATION/data/
STORAGE_BASE_URL/BASE_LOCATION/metadata/
Onde:
STORAGE_BASE_URL
é a URL base para o local de armazenamento ativo associado ao seu volume externo.BASE_LOCATION
é o nome de um diretório em um caminho relativo de seu volume externo (especificado em sua instrução CREATE ICEBERG TABLE).
Especificação de uma cadeia de caracteres vazia para BASE_LOCATION
Se você especificar uma cadeia de caracteres vazia (''
) para o BASE_LOCATION
, o Snowflake cria os diretórios data/
e metadata/
logo abaixo de STORAGE_BASE_URL
.
Por exemplo: STORAGE_BASE_URL/data/
Uso do mesmo local para várias tabelas
Se você usar o mesmo local de armazenamento e especificar o mesmo local base para várias tabelas, o Snowflake gravará os dados de todas essas tabelas no mesmo diretório data/
. Da mesma forma, o Snowflake grava os metadados de todas essas tabelas no mesmo diretório metadata/
.
Organização do armazenamento de tabela com BASE_LOCATION
Para organizar arquivos no armazenamento de várias tabelas Iceberg sob a mesma STORAGE_BASE_URL
, considere usar o nome de tabela como BASE_LOCATION
em sua instrução CREATE ICEBERG TABLE. Dessa forma, o Snowflake grava dados e metadados em um diretório com o mesmo nome da tabela.
Por exemplo:
CREATE OR REPLACE ICEBERG TABLE iceberg_table_1 (
col_1 int,
col_2 string
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'iceberg_external_volume'
BASE_LOCATION = 'iceberg_table_1';
CREATE OR REPLACE ICEBERG TABLE iceberg_table_2 (
col_1 int,
col_2 string
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'iceberg_external_volume'
BASE_LOCATION = 'iceberg_table_2';
A declaração resulta na seguinte estrutura de diretório em seu armazenamento em nuvem externa:
STORAGE_BASE_URL
|-- iceberg_table_1
| |-- data/
| |-- metadata/
|-- iceberg_table_2
| |-- data/
| |-- metadata/
Tabelas que usam um catálogo externo¶
O Snowflake não grava ou exclui objetos de armazenamento para tabelas Iceberg gerenciadas externamente ou em volumes externos com a propriedade ALLOW_WRITES
definida para FALSE
.
Para acessar os dados e metadados de sua tabela, o Snowflake assume a função de controle de acesso que você configura para seu volume externo. Você concede à função permissão para acessar um local de armazenamento (em um bucket ou contêiner). Todos os dados de sua tabela e arquivos de metadados devem estar nesse local. Por exemplo, se seu local de armazenamento for um bucket S3, todos os seus dados e arquivos de metadados deverão existir em algum lugar nesse bucket.
Adicionalmente, converter uma tabela não reescreve nenhum arquivo de dados ou metadados. O Snowflake grava em uma tabela Iceberg somente depois que você converte uma tabela para usar o Snowflake como catálogo.
Habilitação de logs de acesso ao armazenamento¶
Para diagnosticar problemas e auditar o acesso a locais de armazenamento associados a um volume externo, você pode habilitar o registro de armazenamento em log. Os logs de armazenamento ajudam a identificar a causa de arquivos ausentes ou corrompidos.
Habilite o registro em log com seu provedor de armazenamento. Como você possui e gerencia o armazenamento para tabelas Iceberg, o Snowflake não pode habilitar o registro em log ou a auditoria em seus locais de armazenamento Iceberg.
Para saber mais sobre os logs de acesso a armazenamento de seu provedor de armazenamento, consulte os seguintes tópicos externos:
Proteção de arquivos com controle de versão e retenção de objetos¶
Se os dados de sua tabela Iceberg estiverem em um repositório central de dados (ou data lake) operado por diversas ferramentas e serviços, poderá ocorrer uma corrupção ou exclusão acidental. Para proteger os dados da tabela Iceberg e garantir a recuperação de dados excluídos ou substituídos acidentalmente, use o gerenciamento do ciclo de vida do armazenamento e o controle de versão oferecidos por seu provedor de armazenamento.
Com o gerenciamento do ciclo de vida, você pode definir regras de retenção e rastreamento para objetos de armazenamento. Para saber mais sobre o gerenciamento do ciclo de vida de seu provedor de armazenamento, consulte os seguintes tópicos externos:
Gerenciamento do ciclo de vida de armazenamento para o Amazon S3
Gerenciamento do ciclo de vida de objetos para o Google Cloud Storage
Para oferecer suporte à recuperação de objetos, você também pode ativar o controle de versão para seu armazenamento externo em nuvem.
Para ativar o controle de versão do Amazon S3, consulte Ativação do controle de versão em buckets.
Para ativar o controle de versões do Google Cloud Storage, consulte Uso do controle de versão de objetos.
Para ativar o controle de versão para o Azure, consulte Ativação do controle de versão de blob.
Criptografia de arquivos da tabela¶
O Snowflake pode ler arquivos de tabela Iceberg no armazenamento que você criptografa usando esquemas de criptografia comum do lado do servidor (SSE). É necessário usar seu provedor de serviços de nuvem para gerenciar chaves de criptografia e conceder à entidade Snowflake acesso às suas chaves ao usar uma chave gerenciada pelo cliente.
Para o Amazon S3, o Snowflake oferece suporte às seguintes opções de SSE:
Opção de SSE |
Configuração |
---|---|
SSE com chaves gerenciadas pelo Amazon S3 (SSE-S3) |
Especifique |
SSE com chaves AWS KMS (SSE-KMS) |
Especifique Você também deve conceder os privilégios necessários para criptografia SSE-KMS. Para obter instruções, consulte a etapa 3 em Configuração de um volume externo para Amazon S3. |
Para o Google Cloud Storage, o Snowflake oferece suporte à seguinte opção de SSE:
Opção de SSE |
Configuração |
---|---|
SSE com chaves armazenadas no Google Cloud KMS |
Especifique Você também deve Concessão de permissões de conta de serviço do GCS nas chaves do Google Cloud Key Management Service. |