CREATE ICEBERG TABLE (catálogo REST Iceberg)¶
Cria ou substitui uma tabela Apache Iceberg™ no esquema atual/especificado para um catálogo REST Iceberg.
Use este comando para os seguintes cenários:
Você deseja usar um catálogo Iceberg remoto que esteja em conformidade com a especificação OpenAPI REST Apache Iceberg de código aberto.
Você deseja consultar uma tabela no Snowflake Open Catalog ou no Apache Polaris™. Para obter mais informações, consulte Consultar uma tabela no Snowflake Open Catalog usando o Snowflake.
Você deseja criar uma tabela gerenciada externamente em um banco de dados vinculado a catálogo. Consulte CREATE ICEBERG TABLE (banco de dados vinculado a catálogo).
Nota
Antes de criar uma tabela, você deve criar o volume externo onde os metadados e os arquivos de dados do Iceberg são armazenados. Para obter instruções, consulte Configuração de um volume externo.
Você também precisa de uma integração de catálogo para a tabela. Para obter mais informações, consulte Configurar uma integração de catálogo para catálogos Apache Iceberg™ REST ou Configurar uma integração de catálogo para o Snowflake Open Catalog.
- Consulte também:
ALTER ICEBERG TABLE , DROP ICEBERG TABLE , SHOW ICEBERG TABLES , DESCRIBE ICEBERG TABLE , UNDROP ICEBERG TABLE
Sintaxe¶
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = '<catalog_integration_name>' ]
CATALOG_TABLE_NAME = '<rest_catalog_table_name>'
[ CATALOG_NAMESPACE = '<catalog_namespace>' ]
[ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
[ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
[ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Onde:
partitionExpression ::=
<col_name> -- identity transform
| BUCKET ( <num_buckets> , <col_name> )
| TRUNCATE ( <width> , <col_name> )
| YEAR ( <col_name> )
| MONTH ( <col_name> )
| DAY ( <col_name> )
| HOUR ( <col_name> )
Sintaxe da variante¶
CREATE ICEBERG TABLE (banco de dados vinculado a catálogo)¶
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
[
--Column definition
<col_name> <col_type> [ DEFAULT <col_default> ]
[ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
-- Additional column definitions
[ , <col_name> <col_type> [ DEFAULT <col_default> ] [ ... ] ]
]
[ PARTITION BY ( partitionExpression [ , partitionExpression , ... ] ) ]
[ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
[ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
[ ICEBERG_VERSION = <integer> ]
[ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ BASE_LOCATION = '<path_to_directory_for_table_files>' ]
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
Onde:
partitionExpression ::=
<col_name> -- identity transform
| BUCKET ( <num_buckets> , <col_name> )
| TRUNCATE ( <width> , <col_name> )
| YEAR ( <col_name> )
| MONTH ( <col_name> )
| DAY ( <col_name> )
| HOUR ( <col_name> )
CREATE ICEBERG TABLE (banco de dados vinculado a catálogo) … AS SELECT¶
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] [ ... ] AS SELECT <query>
É possível aplicar uma política de mascaramento a uma coluna em uma instrução CTAS. Especifique a política de mascaramento após o tipo de dados da coluna. Por exemplo:
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] ) [ ... ] AS SELECT <query>
Parâmetros obrigatórios¶
table_nameEspecifica o identificador (nome) da tabela no Snowflake; deve ser exclusivo para o esquema no qual a tabela é criada.
Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo,
"My object"). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.Para obter mais informações, consulte Requisitos para identificadores.
Nota
Para recuperar uma lista de tabelas ou namespaces em seu catálogo remoto, é possível usar as seguintes funções:
CATALOG_TABLE_NAME = 'rest_catalog_table_name'Especifica o nome da tabela conforme reconhecido pelo seu catálogo externo. Este parâmetro não pode ser alterado após criar a tabela.
Nota
Não especifique um namespace com o nome da tabela (
mynamespace.mytable). Para especificar um namespace para essa tabela e substituir o namespace padrão definido para a integração do catálogo, use o parâmetro CATALOG_NAMESPACE.col_namePara criar uma tabela em um banco de dados vinculado a catálogo (versão preliminar).
Especifica o identificador da coluna (nome). Todos os requisitos de identificadores de tabela também se aplicam aos identificadores de coluna.
Para obter mais informações, consulte Requisitos para identificadores e Palavras-chave reservadas e limitadas.
Nota
Além das palavras-chave padrão reservadas, as seguintes palavras-chave não podem ser usadas como identificadores de coluna porque são reservadas para funções de contexto padrão ANSI:
CURRENT_DATECURRENT_ROLECURRENT_TIMECURRENT_TIMESTAMPCURRENT_USER
Para a lista de palavras-chave reservadas, consulte Palavras-chave reservadas e limitadas.
col_typePara criar uma tabela em um banco de dados vinculado a catálogo (versão preliminar).
Especifica o tipo de dados para a coluna.
Para obter mais informações sobre os tipos de dados que podem ser especificados para colunas de tabela, consulte Tipos de dados para tabelas Apache Iceberg™.
Parâmetros opcionais¶
col_name col_type DEFAULT col_default-
Para uma tabela que esteja em conformidade com o Iceberg v3, especifica o valor padrão inicial e o padrão de gravação para a coluna especificada. Se o tipo de dados da coluna for cadeia de caracteres, coloque o valor padrão entre aspas simples.
Importante
Ao especificar um valor padrão para uma coluna, você deve especificar um valor estático; não é possível especificar uma expressão ou função para o valor. Esse requisito está de acordo com a especificação Iceberg v3 e se aplica tanto ao valor padrão inicial quanto ao padrão de gravação.
Valores padrão são um recurso do Iceberg v3; portanto, você não pode especificar um valor padrão para uma tabela que esteja em conformidade com o Iceberg v2. Para obter mais informações sobre como usar valores padrão com tabelas Iceberg, consulte Usar valores padrão com tabelas Iceberg.
Nota
Para alterar o padrão de gravação da coluna após a criação da tabela, execute ALTER ICEBERG TABLE … ALTER COLUMN … SET WRITE DEFAULT.
PARTITION BY = ( partitionExpression [ , partitionExpression , ... ] )Especifica uma ou mais expressões de partição.
PATH_LAYOUT = { FLAT | HIERARCHICAL }-
Especifica o layout de caminho que o Snowflake usa ao gravar arquivos de dados Parquet na tabela:
FLAT: o Snowflake grava todos os arquivos de dados Parquet no diretóriodata/da tabela.HIERARCHICAL: o Snowflake grava dados particionados no diretóriodata/da tabela usando um layout de caminho hierárquico. Com esse layout, cada coluna de partição é representada como um nível de diretório no caminho. Para definir essas colunas de particionamento, use o parâmetro PARTITION BY. Esse layout também é chamado de particionamento «estilo Hive».Se você especificar PATH_LAYOUT = HIERARCHICAL sem uma cláusula PARTITION BY, o Snowflake armazenará os arquivos de dados Parquet usando um caminho de layout plano. Você não pode modificar o layout do caminho para uma tabela existente; portanto, você poderá definir esse parâmetro como HIERARCHICAL sem especificar uma cláusula PARTITION BY se não quiser usar o particionamento com caminhos hierárquicos agora, mas poderá usá-lo no futuro.
Nota
Para tabelas gerenciadas externamente que você cria em um banco de dados Snowflake padrão, o Snowflake infere e respeita o esquema de particionamento especificado pelo catálogo remoto.
Padrão:
FLAT
MASKING POLICY = policy_namePara criar uma tabela em um banco de dados vinculado a catálogo (versão preliminar).
Especifica a política de mascaramento a ser definida em uma coluna. A política de mascaramento deve pertencer a um banco de dados Snowflake padrão (não ao banco de dados vinculado a catálogo).
EXTERNAL_VOLUME = 'external_volume_name'Especifica o identificador (nome) do volume externo onde a tabela Iceberg armazena seus arquivos de metadados e dados no formato Parquet. Os metadados e arquivos de manifesto do Iceberg armazenam o esquema da tabela, partições, instantâneos e outros metadados.
Se você não especificar esse parâmetro, o padrão da tabela Iceberg será o volume externo do 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.
CATALOG = 'catalog_integration_name'Especifica o identificador (nome) da integração do catálogo para esta tabela.
Se você não especificar esse parâmetro, a tabela Iceberg assumirá como padrão a integração de catálogo 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.
CATALOG_NAMESPACE = 'catalog_namespace'Opcionalmente, especifica o namespace (por exemplo,
my_database) para a fonte do catálogo REST. Ao especificar um namespace com a integração do catálogo e, em seguida, no nível da tabela, você pode usar uma única integração do catálogo REST para criar tabelas Iceberg em diferentes bancos de dados. Se você não especificar um namespace com a tabela, a tabela usará o namespace padrão do catálogo associado à integração do catálogo.Se um namespace padrão não for especificado com a integração do catálogo, você deverá especificar o namespace da origem do catálogo REST para definir um namespace de catálogo para a tabela.
Nota
Para recuperar uma lista de tabelas ou namespaces em seu catálogo remoto, é possível usar as seguintes funções:
TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }'Especifica um tamanho de arquivo Parquet de destino para a tabela.
'{ 16MB | 32MB | 64MB | 128MB }'especifica um tamanho de arquivo de destino fixo para a tabela.'AUTO'funciona de forma 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. Use essa opção para otimizar o desempenho da tabela no Snowflake.
Tabelas gerenciadas externamente: AUTO especifica que o Snowflake deve ser dimensionado agressivamente para o maior tamanho de arquivo (128 MB).
Para obter mais informações, consulte Definir um tamanho de arquivo de destino.
Padrão: AUTO
MAX_DATA_EXTENSION_TIME_IN_DAYS = integerParâmetro de objeto que especifica o número máximo de dias para os quais o Snowflake pode estender o período de retenção de dados da tabela para evitar que os fluxos na tabela se tornem obsoletos.
Para uma descrição detalhada deste parâmetro, consulte MAX_DATA_EXTENSION_TIME_IN_DAYS.
REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }Especifica se deve substituir os caracteres UTF-8 inválidos pelo caractere de substituição Unicode (�) nos resultados da consulta. Você só pode definir esse parâmetro para tabelas que usam um catálogo Iceberg externo.
TRUEsubstitui os caracteres UTF-8 inválidos pelo caractere de substituição Unicode.FALSEdeixa caracteres UTF-8 inválidos inalterados. O Snowflake retorna uma mensagem de erro do usuário quando encontra caracteres UTF-8 inválidos em um arquivo de dados Parquet.
Se não for especificado, a tabela Iceberg assumirá o valor do parâmetro 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.
Padrão:
FALSE
AUTO_REFRESH = { TRUE | FALSE }Especifica se o Snowflake deve pesquisar automaticamente o catálogo Iceberg externo associado à tabela para atualizações de metadados.
Se nenhum valor for especificado para o parâmetro
REFRESH_INTERVAL_SECONDSna integração do catálogo, o Snowflake usará um intervalo de atualização padrão de 30 segundos.Para obter mais informações, consulte atualização automatizada.
Padrão: FALSE
Nota
O uso de AUTO_REFRESH com INFER_SCHEMA não é compatível.
COPY GRANTSEspecifica manter os privilégios de acesso da tabela original quando uma nova tabela é criada usando qualquer uma das seguintes variantes CREATE TABLE:
CREATE OR REPLACE TABLE
O parâmetro copia todos os privilégios, exceto OWNERSHIP, da tabela existente para a nova tabela. A nova tabela não herda as concessões futuras definidas para o tipo de objeto no esquema. Por padrão, a função que executa a instrução CREATE TABLE é a proprietária da nova tabela.
Se o parâmetro não estiver incluído na instrução CREATE ICEBERG TABLE, então a nova tabela não herdará nenhum privilégio de acesso explícito concedido na tabela original, mas herda qualquer concessão futura definida para o tipo de objeto no esquema.
Nota:
Com compartilhamento de dados:
Se a tabela existente foi compartilhada com outra conta, a tabela de substituição também será compartilhada.
Se a tabela existente foi compartilhada com sua conta como consumidor de dados, e o acesso foi ainda concedido a outras funções na conta (usando
GRANT IMPORTED PRIVILEGESno banco de dados pai), o acesso também é concedido à tabela de substituição.
A saída SHOW GRANTS para a tabela de substituição relaciona o cessionário para os privilégios copiados como a função que executou a instrução CREATE ICEBERG TABLE, com o carimbo de data/hora atual quando a instrução foi executada.
A operação de cópia de concessões ocorre atomicamente no comando CREATE ICEBERGTABLE (ou seja, dentro da mesma transação).
COMMENT = 'string_literal'Especifica um comentário para a tabela.
Padrão: sem valor
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )Especifica o nome da tag e o valor da cadeia de caracteres dela.
O valor de tag é sempre uma cadeia de caracteres, e o número máximo de caracteres do valor da tag é 256.
Para obter informações sobre como especificar tags em uma instrução, consulte Cotas de tags.
BASE_LOCATION = 'path_to_directory_for_table_files'O caminho para um diretório que o Snowflake usa para construir caminhos de gravação para os arquivos de dados e metadados da tabela.
Se você usar uma
EXTERNAL_VOLUME, esse caminho deve ser incluído nos caminhos de armazenamento especificados para o volume externo e você tem a opção de especificar um caminho relativo. Se você especificar um caminho relativo, ele é relativo aoSTORAGE_BASE_URLpara o volume externo. Se não for especificado, o Snowflake constrói um caminho de gravação usando atributos como o valor do BASE_LOCATION_PREFIX Parâmetro e o nome da tabela.Se estiver usando credenciais fornecidas, você também deverá especificar um caminho absoluto.
Nota
Este diretório não pode ser alterado depois que você cria uma tabela.
ICEBERG_VERSION = integer-
Especifica a versão da especificação Apache Iceberg™ à qual a tabela está em conformidade.
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.
Se você não definir esse parâmetro, a tabela Iceberg usará a versão do 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.
2: a tabela está em conformidade com a versão 2 do Iceberg.3: a tabela está em conformidade com a versão 3 do Iceberg.
Padrão:
2Para obter mais informações sobre este parâmetro, consulte ICEBERG_VERSION.
ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE }-
Especifica se a tabela usa o comportamento de mesclagem na leitura.
Se você não definir este parâmetro, a tabela Iceberg usará o comportamento de mesclagem na leitura especificado 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.
- Valores:
TRUE: A tabela usa o comportamento de mesclagem na leitura. Dependendo se a tabela está em conformidade com a v2 ou a v3 da especificação de tabela Apache Iceberg™, o comportamento é descrito na lista a seguir:Se a tabela estiver em conformidade com a v2, use arquivos de exclusão posicional.
Se a tabela estiver em conformidade com a v3, use vetores de exclusão.
FALSE: A tabela usa o comportamento de cópia na gravação.Padrão:
TRUEPara uma descrição detalhada deste parâmetro, consulte ENABLE_ICEBERG_MERGE_ON_READ.
WITH CONTACT ( purpose = contact [ , purpose = contact ...] )Associe o novo objeto a um ou mais contatos.
Especifique a cláusula WITH CONTACT após todas as outras cláusulas, exceto a AS (se essa cláusula for compatível com este comando).
Parâmetros de expressão de partição (partitionExpression)¶
Snowflake oferece suporte a todas as transformações de partição na versão 2 da especificação Apache Iceberg. Para obter mais informações, consulte Transformações de partição.
Para obter mais informações sobre o particionamento de tabelas Iceberg, consulte Particionamento Iceberg.
col_nameEspecifica o identificador (nome) da coluna de origem a ser particionada.
Quando usado sozinho, sem uma transformação como YEAR, especifica uma transformação de identidade na coluna de origem. Para obter mais informações, consulte identidade.
BUCKETEspecifica uma transformação de bucket. Para obter mais informações, consulte Detalhes da transformação de bucket.
num_bucketsé o número de buckets nos quais os dados serão agrupados.TRUNCATEEspecifica uma transformação de truncamento, que particiona os dados com base nos valores truncados da coluna de origem especificada. Para obter mais informações, consulte Detalhes da transformação de truncamento.
YEAREspecifica uma transformação de ano, que extrai o ano de um valor de coluna de origem com data ou carimbo de data/hora. Para obter mais informações, consulte Transformações de partição.
MONTHEspecifica uma transformação de mês. Para obter mais informações, consulte Transformações de partição.
DAYEspecifica uma transformação de dia, que extrai o dia de um valor de coluna de origem com data ou carimbo de data/hora. Para obter mais informações, consulte Transformações de partição.
HOUREspecifica uma transformação de hora, que extrai a hora de um valor de coluna de origem com carimbo de data/hora. Para obter mais informações, consulte Transformações de partição.
Requisitos de controle de acesso¶
A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:
Privilégio |
Objeto |
Notas |
|---|---|---|
CREATE ICEBERG TABLE |
Esquema |
|
CREATE EXTERNAL VOLUME |
Conta |
Necessário para criar um novo volume externo. |
USAGE |
Volume externo |
Necessário para fazer referência a um volume externo existente. |
CREATE INTEGRATION |
Conta |
Necessário para criar uma nova integração de catálogo. |
USAGE |
Integração de catálogo |
Necessário para fazer referência a uma integração de catálogo existente. |
A operação em um objeto de esquema requer pelo menos um privilégio no banco de dados pai e um privilégio no esquema pai.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
Se você criou seu volume externo ou integração de catálogo usando um identificador entre aspas duplas, deverá especificar o identificador exatamente conforme criado (incluindo as aspas duplas) na instrução CREATE ICEBERG TABLE. A não inclusão das aspas pode resultar em um erro
Object does not existou um tipo similar de erro.O OR REPLACE opção executa uma operação não atômica, que neste caso é uma opção DROP Operação seguida por CREATE, em seu catálogo Iceberg externo.
Para criar uma tabela Iceberg com suporte a gravação:
Se você usar um banco de dados Snowflake padrão, primeiro deverá criar uma tabela Iceberg no catálogo remoto. Por exemplo, você pode usar o Spark para gravar uma tabela Iceberg no Open Catalog. Não especifique definições de coluna em sua instrução CREATE ICEBERG TABLE.
Se você usar um banco de dados vinculado a catálogo, deve especificar as definições de coluna ao criar a tabela. Como alternativa, você pode gravar em tabelas Iceberg que o Snowflake descobre automaticamente em seu catálogo remoto.
A propriedade TARGET_FILE_SIZE é compatível apenas com tabelas com suporte a gravação (versão preliminar).
Considerações para a criação de tabelas:
Um esquema não pode conter tabelas e/ou visualizações com o mesmo nome. Ao criar uma tabela:
Se já existir uma visualização com o mesmo nome no esquema, um erro é emitido e a tabela não é criada.
Se uma tabela com o mesmo nome já existir no esquema, um erro é emitido e a tabela não é criada, a menos que a palavra-chave opcional
OR REPLACEesteja incluída no comando.
Instruções CREATE OR REPLACE <object> são atômicas. Ou seja, quando um objeto é substituído, o objeto antigo é excluído e o novo objeto é criado em uma única transação.
Isso significa que qualquer consulta concorrente com a operação CREATE OR REPLACE ICEBERG TABLE utiliza a versão da tabela antiga ou nova.
As cláusulas
OR REPLACEeIF NOT EXISTSsão mutuamente exclusivas. Elas não podem ser usadas na mesma instrução.Assim como as palavras-chave reservadas, nomes de funções reservadas ANSI (CURRENT_DATE, CURRENT_TIMESTAMP etc.) não podem ser usados como nomes de colunas.
Recriar uma tabela (usando a palavra-chave opcional
OR REPLACE) diminui seu histórico, o que torna qualquer fluxo na tabela obsoleto. Um fluxo obsoleto é ilegível.
Uso da sintaxe da variante:
CREATE ICEBERG TABLE … LIKE:
Para tabelas Iceberg particionadas, o particionamento da tabela de origem é ignorado. Para substituir esse comportamento, especifique a cláusula PARTITION BY com o comando.
CREATE ICEBERG TABLE … CLONE:
Para tabelas Iceberg particionadas, a tabela clonada retém as informações de particionamento da tabela de origem.
CREATE ICEBERG TABLE (banco de dados vinculado a catálogo) … AS SELECT:
Não é suportado se você usa um dos seguintes catálogos como seu catálogo remoto:
AWS Glue
Databricks Unity Catalog
Se preferir, use a sintaxe CREATE ICEBERG TABLE (catálogo REST Iceberg) para criar uma tabela Iceberg vazia e, em seguida, use uma instrução INSERT INTO … SELECT para inserir dados na tabela vazia. No entanto, essa alternativa usa duas transações separadas, portanto não garante atomicidade.
Usando valores padrão:
Você não pode usar expressões ou funções, como CURRENT_TIMESTAMP(), para valores padrão em tabelas Iceberg v3. Apenas valores constantes são permitidos na especificação de tabela Apache Iceberg v3.
Para tabelas Iceberg v2, você pode usar expressões como CURRENT_TIMESTAMP() com o Snowflake. No entanto, essa propriedade não é persistente nos metadados do Iceberg porque a especificação de valores padrão foi introduzida na versão 3. As colunas em tabelas Iceberg v2 com valores padrão como expressões são utilizadas apenas com o Snowflake, mas a tabela permanece interoperável com outros mecanismos e compatível com a especificação da versão 2.
O uso de valores padrão com CREATE ICEBERG TABLE (banco de dados vinculado a catálogo) … é compatível.
O uso de valores padrão com CREATE ICEBERG TABLE (banco de dados vinculado a catálogo) … AS SELECT não é compatível.
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Exemplos¶
Crie uma tabela Iceberg que use um catálogo REST Iceberg remoto¶
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'my_rest_catalog_integration'
CATALOG_TABLE_NAME = 'my_remote_table'
AUTO_REFRESH = TRUE;
Crie uma tabela Iceberg para consultar uma tabela em Snowflake Open Catalog¶
Este exemplo cria uma tabela Iceberg que você pode usar para Consultar uma tabela no Snowflake Open Catalog usando o Snowflake.
CREATE ICEBERG TABLE open_catalog_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'open_catalog_int'
CATALOG_TABLE_NAME = 'my_open_catalog_table'
AUTO_REFRESH = TRUE;
Criar uma tabela Iceberg em um banco de dados vinculado a catálogo¶
O exemplo a seguir cria uma tabela Iceberg gravável em um banco de dados vinculado a catálogo com definições de coluna:
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
);
Criar uma tabela particionada em um banco de dados vinculado a catálogo¶
O exemplo a seguir cria uma tabela Iceberg gerenciada externamente usando o valor de uma coluna de carimbo de data/hora denominada start_date para particionar a tabela por dia:
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE iceberg_partitioned_date_time (start_date timestamp)
PARTITION BY (DAY(start_date));
Você pode inserir dados na tabela usando os recursos de carregamento de tabela aceitos. Por exemplo, use uma instrução INSERT INTO para inserir os seguintes dados na tabela iceberg_partitioned_date_time vazia criada anteriormente:
INSERT INTO iceberg_partitioned_date_time (start_date)
VALUES
(to_timestamp_ntz('2023-01-02 00:00:00')),
(to_timestamp_ntz('2023-02-03 00:00:00')),
(to_timestamp_ntz('2023-01-02 01:00:00')),
(to_timestamp_ntz('2023-02-03 02:00:00'));
Para obter mais informações, consulte Particionamento Iceberg.
Criar uma tabela Iceberg v3 gerenciada externamente¶
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;
Criar uma tabela Iceberg v3 em um banco de dados vinculado a catálogo¶
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;
Criar uma tabela particionada em um banco de dados vinculado a catálogo com layout de caminho hierárquico¶
O exemplo a seguir cria uma tabela Iceberg gerenciada externamente usando o valor de uma coluna de carimbo de data/hora chamada start_date para particionar a tabela por dia. Como PATH_LAYOUT = HIERARCHICAL, o Snowflake grava dados na tabela Iceberg particionada usando um layout de caminho hierárquico para arquivos em que as informações de particionamento estão incluídas nos caminhos dos arquivos:
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE iceberg_partitioned_date_time (start_date timestamp)
PARTITION BY (DAY(start_date))
PATH_LAYOUT = HIERARCHICAL;
Você pode inserir dados na tabela usando os recursos de carregamento de tabela aceitos. Por exemplo, use uma instrução INSERT INTO para inserir os seguintes dados na tabela iceberg_partitioned_date_time vazia criada anteriormente:
INSERT INTO iceberg_partitioned_date_time (start_date)
VALUES
(to_timestamp_ntz('2023-01-02 00:00:00')),
(to_timestamp_ntz('2023-02-03 00:00:00')),
(to_timestamp_ntz('2023-01-02 01:00:00')),
(to_timestamp_ntz('2023-02-03 02:00:00'));
Para obter mais informações, consulte Particionamento com caminhos hierárquicos.
