Tabelas Apache Iceberg™: Suporte para Apache Iceberg™ v3 (versão preliminar)¶
Esta versão preliminar introduz suporte para v3 da especificação Apache Iceberg™, mas com algumas considerações e limitações. Salvo indicação em contrário, tanto as tabelas Iceberg gerenciadas pelo Snowflake quanto as gerenciadas externamente são suportadas nesta versão preliminar.
Recursos Iceberg v3 compatíveis¶
Esta seção lista os recursos do Iceberg v3 que são compatíveis nesta versão preliminar.
Tipos de dados¶
Os seguintes tipos de dados v3 são compatíveis com a versão preliminar pública:
geographygeometrynanosecondvariant
Para obter mais informações, consulte Tipos de dados do Iceberg v3.
Valores padrão¶
Consulte Valores padrão.
Vetores de exclusão¶
Consulte Vetores de exclusão.
Linhagem de linhas¶
Consulte Linhagem de linhas.
Configuração da versão padrão do Iceberg¶
As tabelas Iceberg têm inerentemente uma versão de formato com a qual estão em conformidade. Para tabelas Iceberg gerenciadas externamente em um banco de dados Snowflake padrão, o Snowflake recupera essa versão dos metadados da tabela.
Para as seguintes tabelas Iceberg, o proprietário da tabela deve especificar com qual versão Iceberg a tabela deve estar em conformidade:
Tabela Iceberg gerenciada pelo Snowflake
Tabelas Iceberg gerenciadas externamente que você cria em um banco de dados vinculado a catálogo
A versão do formato Iceberg padrão do sistema no Snowflake é v2, mas você pode defini-la para v3, se necessário. Para definir a versão do Iceberg como v3, execute uma das seguintes ações:
Use o parâmetro ICEBERG_VERSION_DEFAULT para definir a versão Iceberg como
3no nível da conta, do banco de dados ou do esquema. Para obter mais informações, consulte ICEBERG_VERSION_DEFAULT.Especifique
ICEBERG_VERSION = 3em sua instrução CREATE ICEBERG TABLE.Nota
Se você não especificar uma versão Iceberg ao criar uma tabela Iceberg, a tabela assumirá como padrão a versão Iceberg definida para o esquema, banco de dados ou conta. O esquema tem precedência sobre o banco de dados e o banco de dados tem precedência sobre a conta.
Cuidado
Antes de usar outros mecanismos para atualizar a versão de formato de uma tabela Iceberg nas propriedades da tabela para a v3, certifique-se de que a tabela não esteja sendo utilizada por mecanismos ou aplicativos que ainda não são compatíveis com a v3. O downgrade de versões de formato não é compatível com a especificação Apache Iceberg. Portanto, todos os leitores e gravadores devem ser compatíveis com a v3. A versão padrão para tabelas Iceberg no Snowflake é a v2, que pode ser configurada para a v3, se necessário. No momento, não é possível usar o Snowflake para realizar atualizações de versão no local.
Notas de uso¶
Para modificar o parâmetro ICEBERG_VERSION_DEFAULT no nível da conta, você deve ser um administrador de conta; ou seja, você deve ser um usuário com a função ACCOUNTADMIN.
Para modificar o parâmetro ICEBERG_VERSION_DEFAULT no nível do banco de dados ou do esquema, a função usada para executar a operação deve ter o privilégio OWNERSHIP no respectivo banco de dados ou esquema.
Exemplos¶
Especifique que as novas tabelas Iceberg no banco de dados my_db devem ser criadas usando v3:
ALTER DATABASE my_db SET ICEBERG_VERSION_DEFAULT=3;
Crie uma nova tabela Iceberg gerenciada externamente com v3. As definições de coluna incluídas no comando indicam que uma nova tabela será criada ou uma tabela existente será substituída no catálogo remoto. A tabela é criada com sucesso porque é uma tabela nova que não tem uma versão existente.
CREATE OR REPLACE ICEBERG TABLE my_iceberg_v3_table (
boolean_col boolean,
int_col int,
long_col long,
)
CATALOG='my_catalog_integration'
ICEBERG_VERSION=3;
Crie uma tabela Iceberg gerenciada externamente com v3 a partir de uma tabela existente com metadados Iceberg. A falta de uma definição de coluna ou versão de formato neste exemplo indica que esta tabela já existe e a especificação da coluna e a versão de formato serão inferidas a partir dos metadados Iceberg do catálogo remoto. Este exemplo usa credenciais fornecidas pelo catálogo, então o parâmetro EXTERNAL_VOLUME está excluído da instrução CREATE ICEBERG TABLE:
CREATE OR REPLACE ICEBERG TABLE my_iceberg_v3_table
CATALOG = 'my_catalog_integration'
CATALOG_TABLE_NAME = 'my_table'
AUTO_REFRESH = TRUE;
Nota
Você não pode usar o comando ALTER ICEBERG TABLE para alterar a versão de formato de uma tabela existente.
Obter a versão de formato para tabelas Iceberg¶
O exemplo a seguir mostra como obter a versão Iceberg para uma tabela específica:
SHOW PARAMETERS LIKE 'ICEBERG_VERSION' IN TABLE my_v3_iceberg_table;
Saída:
+-----------------+-------+---------+-------+---------------------------------------------------+--------+ | key | value | default | level | description | type | +-----------------+-------+---------+-------+---------------------------------------------------+--------+ | ICEBERG_VERSION | 3 | 2 | TABLE | Specifies the Iceberg table format version to ... | NUMBER | +-----------------+-------+---------+-------+---------------------------------------------------+--------+
O exemplo a seguir mostra como obter a versão Iceberg para uma tabela específica usando a função GET_DDL para recuperar a definição da tabela Iceberg:
SELECT GET_DDL('ICEBERG_TABLE', 'my_v3_iceberg_table');
Saída:
CREATE ICEBERG TABLE my_v3_iceberg_table ( record VARIANT, event_timestamp TIMESTAMP_LTZ(6) ) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'my_external_volume' BASE_LOCATION = 'my_iceberg_table' ICEBERG_VERSION = 3;
Considerações e limitações para recursos do Iceberg v3¶
Considere as seguintes informações ao usar os recursos do Iceberg v3:
Recursos do Snowflake não compatíveis¶
Os seguintes recursos do Snowflake não são compatíveis nesta versão preliminar do Iceberg v3:
Fluxos apenas para anexação em tabelas Iceberg gerenciadas externamente
Regiões SnowGov
Para tabelas que usam um catálogo externo, não é possível criar tabelas Iceberg v3 com colunas de tipo estruturado, que incluam OBJECT, ARRAY ou MAP. Por exemplo, você não pode usar CREATE ICEBERG TABLE … AS SELECT (CTAS) para criar uma tabela Iceberg v3 gerenciada externamente com colunas de tipo estruturado.
É possível criar tabelas Iceberg v3 gerenciadas pelo Snowflake com colunas de tipo estruturado.
Uma atualização no local de uma tabela Iceberg gerenciada pelo Snowflake da v2 para a v3, que inclui clonagem de uma tabela v2 e depois a atualização do clone para a v3
Importante
Se você usar o Apache Spark para atualizar uma tabela Iceberg gerenciada externamente da v2 para a v3, deverá usar uma confirmação que crie um novo instantâneo, como operações DML. Caso contrário, se a versão do formato for atualizada nas propriedades da tabela sem um novo instantâneo, a atualização manual e automatizada do Snowflake para a tabela falhará até que um novo instantâneo seja criado.
O exemplo a seguir usa o Apache Spark para atualizar uma tabela Iceberg gerenciada externamente da v2 para a v3:
ALTER TABLE table_name SET TBLPROPERTIES('format-version'='3');
Nota
A lista de recursos sem suporte não está finalizada e está sujeita a alterações no futuro. A lista será atualizada, conforme necessário, para refletir os recursos mais recentes sem suporte.
Para considerações e limitações específicas de um recurso v3, consulte o tópico do recurso de um recurso.
Recursos do Snowflake compatíveis¶
Recursos que não estão listados na seção Recursos do Snowflake não compatíveis são compatíveis. Os recursos compatíveis incluem aqueles na lista a seguir:
Recurso |
Notas |
|---|---|
Clustering |
Somente Iceberg v3 gerenciada pelo Snowflake. |
Conversão de tabelas v3 gerenciadas externamente em gerenciadas pelo Snowflake |
Compatível com as seguintes considerações:
|
LOAD_MODE = FULL_INGEST ou ADD_FILES COPY são aceitas com as seguintes considerações:
|
|
Compatível com as seguintes limitações:
|
|
Políticas de proteção de dados |
As seguintes políticas de proteção de dados são compatíveis:
|
Monitoramento da qualidade dos dados |
|
Gravar uma tabela Iceberg gerenciada externamente v3 como destino de uma tabela dinâmica. |
|
Aceleração de consulta |
|
Classificação de dados confidenciais |
|
As tabelas particionadas também não podem gravar vetores de exclusão; somente cópia na gravação é compatível com tabelas particionadas. |
|
Versões 4.0 ou mais recentes. |
|
1.33.0 ou mais recente. |
|
Método de API do Snowpark pandas to_iceberg |
Compatível apenas com Iceberg v3 quando ICEBERG_VERSION_DEFAULT é definido na conta, banco de dados ou esquema. Se ICEBERG_VERSION = 3 é definido no nível da tabela, o método da API Snowpark pandas to_iceberg não é compatível. |
Há suporte para a gravação de dataframes em tabelas Iceberg v3 existentes usando um método de anexação ou substituição. Não há suporte para a criação de uma nova tabela Iceberg v3. |
|
|
|
Recursos do Iceberg v3 não compatíveis¶
Os seguintes recursos da especificação Iceberg v3 não são compatíveis:
Variante aninhada
Transformações com vários argumentos para particionamento e classificação
Chaves de criptografia de tabela
Tipo de dados UNKNOWN
Exemplos: Suporte para v3 com recursos Snowflake existentes¶
Esta seção lista exemplos de recursos existentes do Snowflake que são compatíveis com a v3. Uma listagem de recursos inclui um exemplo para uma tabela gerenciada pelo Snowflake e uma tabela gerenciada externamente, quando compatível.
Para obter a lista completa de recursos do Snowflake que são suportados nesta versão preliminar do Iceberg v3, consulte Recursos do Snowflake compatíveis.
Criar uma tabela Iceberg v3¶
O exemplo a seguir cria uma tabela Apache Iceberg™ gerenciada pelo Snowflake em conformidade com a v3 da especificação Apache Iceberg™.
CREATE ICEBERG TABLE my_v3_iceberg_table (
record VARIANT,
event_timestamp TIMESTAMP_LTZ(6)
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table'
ICEBERG_VERSION = 3;
O exemplo a seguir cria uma tabela Apache Iceberg™ que usa um catálogo Iceberg REST remoto e está em conformidade com a v3 da especificação Apache Iceberg™:
Nota
Você não precisa especificar ICEBERG_VERSION = 3 com o comando porque a versão do formato já está definida nos metadados do catálogo externo; portanto, o Snowflake recupera essa versão dos metadados.
CREATE ICEBERG TABLE my_v3_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'my_rest_catalog_integration'
CATALOG_TABLE_NAME = 'my_remote_table'
AUTO_REFRESH = TRUE;
O exemplo a seguir cria uma tabela Iceberg gravável em um banco de dados vinculado a catálogo com definições de coluna e está em conformidade com a v3 da especificação Apache Iceberg™:
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
first_name string,
last_name string,
amount int,
create_date date
)
ICEBERG_VERSION = 3;
Gravar em uma tabela Iceberg v3¶
Os comandos do DML INSERT, UPDATE, DELETE, MERGE, TRUNCATE TABLE e COPY INTO são compatíveis com a gravação em tabelas Iceberg v3 gerenciadas pelo Snowflake e gerenciadas externamente:
O exemplo a seguir insere uma linha em uma tabela Apache Iceberg™ que está em conformidade com a v3 da especificação da tabela Apache Iceberg™:
INSERT INTO my_v3_iceberg_table (id, payload) VALUES (1, PARSE_JSON('{"name": "Alice", "age": 30}'));
O exemplo a seguir carrega arquivos em uma tabela Apache Iceberg™ que está em conformidade com a v3 da especificação de tabela Apache Iceberg™:
COPY INTO my_v3_iceberg_table
FROM @my_json_stage
FILE_FORMAT = 'my_json_format'
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
Carregar dados usando o Snowpipe¶
O exemplo a seguir carrega dados de arquivos para tabelas Iceberg v3, para tabelas gerenciadas pelo Snowflake e gerenciadas externamente:
CREATE PIPE mypipe
AUTO_INGEST = TRUE
INTEGRATION = 'MYINT'
AS
COPY INTO snowpipe_db.public.my_v3_iceberg_table
FROM @snowpipe_db.public.mystage
FILE_FORMAT = (TYPE = 'JSON');
Nota
O Snowflake oferece suporte a recursos adicionais de gravação para o Iceberg v3. Consulte essa lista em Considerações e limitações para os recursos do Iceberg v3, e depois consulte a lista de recursos compatíveis do Snowflake.
Criar uma tabela Iceberg dinâmica v3¶
O exemplo a seguir grava uma tabela Iceberg v3 gerenciada pelo Snowflake como a saída de uma tabela dinâmica:
CREATE DYNAMIC ICEBERG TABLE my_dynamic_iceberg_v3_table (
num_orders NUMBER(10,0),
order_day
)
TARGET_LAG = '20 minutes'
WAREHOUSE = my_warehouse
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my_dynamic_iceberg_v3_table'
ICEBERG_VERSION = 3
AS
SELECT
COUNT(DISTINCT order_id)
DATE_TRUNC('DAY', order_timestamp_ns) AS order_day
FROM staging_v3_iceberg_table;
Nota
Não há suporte para gravar uma tabela Iceberg v2 ou v3 gerenciada externamente como destino de uma tabela dinâmica. A saída de uma tabela Iceberg dinâmica só pode ser gerenciada pelo Snowflake.
Consultar uma tabela Iceberg v3¶
O exemplo a seguir consulta uma tabela Iceberg v3 gerenciada pelo Snowflake ou gerenciada externamente:
SELECT * FROM MY_DB.MY_SCHEMA.MY_ICEBERG_V3_TABLE;