CREATE ICEBERG TABLE (Snowflake como o catálogo Iceberg)¶
Cria ou substitui uma tabela Apache Iceberg™ que usa o Snowflake como o catálogo Iceberg no esquema atual/especificado.
Esse comando é compatível com as seguintes variantes:
CREATE ICEBERG TABLE … AS SELECT (cria uma tabela preenchida; também chamada de CTAS)
CREATE ICEBERG TABLE … LIKE (cria uma cópia vazia de uma tabela existente)
Este tópico refere-se às tabelas Iceberg simplesmente como “tabelas”, exceto onde a especificação de tabelas Iceberg evita confusão.
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.
- 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> (
-- Column definition
<col_name> <col_type>
[ inlineConstraint ]
[ NOT NULL ]
[ COLLATE '<collation_specification>' ]
[ { DEFAULT <expr>
| { AUTOINCREMENT | IDENTITY }
[ { ( <start_num> , <step_num> )
| START <num> INCREMENT <num>
} ]
} ]
[ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
[ [ WITH ] PROJECTION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT '<string_literal>' ]
-- Additional column definitions
[ , <col_name> <col_type> [ ... ] ]
-- Out-of-line constraints
[ , outoflineConstraint [ ... ] ]
)
[ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = 'SNOWFLAKE' ]
BASE_LOCATION = '<directory_for_table_files>'
[ CATALOG_SYNC = '<open_catalog_integration_name>']
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] AGGREGATION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Onde:
inlineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } [ <constraint_properties> ]Para detalhes adicionais de restrição em linha, consulte CREATE | ALTER TABLE … CONSTRAINT.
outoflineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ] | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ] | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ] REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ] } [ <constraint_properties> ]Nota
O Snowflake representa colunas definidas como PRIMARY KEY como campos identificadores nos metadados do Iceberg. Os IDs para essas colunas são preenchidos nos metadados como IDs do campo identificador.
O Snowflake não aplica restrições NOT NULL e UNIQUE em colunas PRIMARY KEY para tabelas Iceberg.
Para detalhes adicionais de restrição fora de linha, consulte CREATE | ALTER TABLE … CONSTRAINT.
Sintaxe da variante¶
CREATE ICEBERG TABLE … AS SELECT (também chamado de CTAS)¶
Cria uma nova tabela preenchida com os dados devolvidos por uma consulta: Coloque a cláusula AS SELECT no fim da instrução.
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ EXTERNAL_VOLUME = '<external_volume_name>' ] [ CATALOG = 'SNOWFLAKE' ] BASE_LOCATION = '<relative_path_from_external_volume>' [ COPY GRANTS ] [ ... ] AS SELECT <query>
Uma política de mascaramento pode ser aplicada a uma coluna em uma instrução CTAS. Especifique a política de mascaramento após o tipo de dados da coluna. Da mesma forma, uma política de acesso a linhas pode ser aplicada à tabela. Por exemplo:
CREATE ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] ) [ EXTERNAL_VOLUME = '<external_volume_name>' ] [ CATALOG = 'SNOWFLAKE' ] BASE_LOCATION = '<directory_for_table_files>' [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] ) [ ... ] AS SELECT <query>
Nota
Em um CTAS, o parâmetro COPY GRANTS é válido somente quando combinado com a cláusula OR REPLACE. COPY GRANTS copia os privilégios da tabela sendo substituída por CREATE OR REPLACE (se já existir), e não da(s) tabela(s) de origem sendo consultada(s) na instrução SELECT. CTAS com COPY GRANTS permite que você substitua uma tabela por um novo conjunto de dados enquanto mantém as concessões existentes nesta tabela.
Para obter mais informações sobre o parâmetro COPY GRANTS, consulte COPY GRANTS neste documento.
Para obter mais informações sobre esta sintaxe da variante, consulte as notas de uso.
CREATE ICEBERG TABLE … LIKE¶
Cria uma nova tabela com as mesmas definições de coluna que uma tabela existente, mas sem copiar os dados da tabela existente. Os nomes das colunas, tipos, padrões e restrições são copiados para a nova tabela:
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> LIKE <source_table> [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ COPY GRANTS ] [ ... ]
Para obter mais informações sobre o parâmetro COPY GRANTS, consulte COPY GRANTS neste documento.
Nota
CREATE TABLE … LIKE não é compatível com tabelas com uma sequência de incremento automático acessada por meio de um compartilhamento de dados.
Para obter mais informações sobre esta sintaxe da variante, consulte as notas de uso.
CREATE ICEBERG TABLE … CLONE¶
Cria uma nova tabela Iceberg com as mesmas definições de coluna e com todos os dados existentes da tabela de origem, sem realmente copiar os dados. Você também pode usar esta variante para clonar uma tabela em um momento ou ponto específico no passado (usando Time Travel):
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <name> CLONE <source_iceberg_table> [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ] [COPY GRANTS] ...
Nota
Se a instrução substituir uma tabela Iceberg existente com o mesmo nome, o Snowflake copiará as concessões da tabela que está sendo substituída. Se não houver uma tabela existente com esse nome, o Snowflake copia as concessões da tabela de origem que está sendo clonada.
Para obter mais informações sobre o parâmetro COPY GRANTS, consulte COPY GRANTS neste documento.
Para mais informações sobre clonagem, consulte CREATE <objeto> … CLONE e Clonagem e tabelas Apache Iceberg™.
Parâmetros obrigatórios¶
table_name
Especifica o identificador (nome) da tabela; deve ser único 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.
col_name
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_DATE
CURRENT_ROLE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
Para a lista de palavras-chave reservadas, consulte Palavras-chave reservadas e limitadas.
col_type
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™.
Nota
Você não pode usar
float
oudouble
como chaves primárias (de acordo com o especificação do Apache Iceberg).BASE_LOCATION = 'directory_for_table_files'
O caminho para um diretório onde o Snowflake pode gravar dados e arquivos de metadados para a tabela. Especifique um caminho relativo da localização da tabela
EXTERNAL_VOLUME
. Para obter mais informações, consulte Diretórios de dados e metadados.Este diretório não pode ser alterado depois que você cria uma tabela.
Parâmetros opcionais¶
CONSTRAINT ...
Define uma restrição em linha ou fora de linha para a(s) coluna(s) especificada(s) na tabela.
Para obter informações de sintaxe, consulte CREATE | ALTER TABLE … CONSTRAINT. Para obter mais informações sobre restrições, consulte Restrições.
COLLATE 'collation_specification'
Especifica o agrupamento a ser usado para operações de coluna, tais como comparação de cadeias de caracteres. Esta opção aplica-se somente às colunas de texto (VARCHAR, STRING, TEXT etc.). Para obter mais informações, consulte Especificações de agrupamento.
DEFAULT ...
ou .AUTOINCREMENT ...
Especifica se um valor padrão é automaticamente inserido na coluna caso um valor não seja explicitamente especificado por uma instrução INSERT ou CREATE TABLE AS SELECT:
DEFAULT expr
O valor padrão da coluna é definido pela expressão especificada que pode ser qualquer uma das opções seguintes:
Valor constante.
Referência de sequência (
seq_name.NEXTVAL
).Expressão simples que retorna um valor escalar.
A expressão simples pode incluir uma UDF (função definida pelo usuário) SQL se a UDF não for uma UDF segura.
Nota
Se uma expressão padrão se referir a uma UDF SQL, então a função será substituída pela definição da função no momento da criação da tabela. Se a função definida pelo usuário for redefinida no futuro, isso não atualizará a expressão padrão da coluna.
A expressão simples não pode conter referências a:
Subconsultas.
Agregados.
Funções de janela.
UDFs seguras.
UDFs escritas em linguagens diferentes de SQL (por exemplo, Java, JavaScript).
Funções externas.
- {
AUTOINCREMENT
|IDENTITY
} [ {( start_num , step_num )
|START num INCREMENT num
} ] AUTOINCREMENT
eIDENTITY
são sinônimos. Quando um ou outro é usado, o valor padrão para a coluna começa com um número especificado e cada valor sucessivo é incrementado automaticamente pelo valor especificado.Cuidado
O Snowflake usa uma sequência para gerar os valores de uma coluna de incremento automático. As sequências têm limitações; consulte Semântica da sequência.
O valor padrão para o início e o passo/incremento é
1
.AUTOINCREMENT
eIDENTITY
podem ser usados somente para colunas com tipos de dados numéricos.
Padrão: sem valor (a coluna não tem valor padrão)
Nota
DEFAULT
eAUTOINCREMENT
são mutuamente exclusivos; apenas um deles pode ser especificado para uma coluna.MASKING POLICY = policy_name
Especifica a política de mascaramento a ser definida em uma coluna.
PROJECTION POLICY policy_name
Especifica a política de projeção a ser definida em uma coluna.
COMMENT 'string_literal'
Especifica um comentário para a coluna.
(Observe que os comentários podem ser especificados no nível da coluna ou da tabela. A sintaxe de cada um é um pouco diferente).
USING ( col_name , cond_col_1 ... )
Especifica os argumentos a serem passados para a expressão SQL da política de mascaramento condicional.
A primeira coluna da lista especifica a coluna das condições da política para mascarar ou tokenizar os dados e deve corresponder à coluna para a qual a política de mascaramento é definida.
As colunas adicionais especificam as colunas a serem avaliadas para determinar se devem mascarar ou tokenizar os dados em cada linha do resultado da consulta quando uma consulta seleciona a partir da primeira coluna.
Se a cláusula USING for omitida, o Snowflake tratará a política de mascaramento condicional como uma política de mascaramento normal.
CLUSTER BY ( expr [ , expr , ... ] )
Especifica uma ou mais colunas ou expressões de colunas na tabela como a chave de clustering. Para obter mais informações, consulte Chaves de clustering e tabelas clusterizadas.
Padrão: sem valor (nenhuma chave de clustering está definida para a tabela)
Importante
As chaves de clustering não são destinadas ou recomendadas para todas as tabelas; elas normalmente são vantajosas para tabelas muito grandes (ou seja, com vários terabytes).
Antes de especificar uma chave de clustering para uma tabela, você deve entender as micropartições. Para obter mais informações, consulte Explicação das estruturas de tabela do Snowflake.
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 = 'SNOWFLAKE'
Especifica o Snowflake como o catálogo Iceberg. Snowflake cuida de toda a manutenção do ciclo de vida, como compactação, da tabela.
CATALOG_SYNC = 'open_catalog_integration_name'
Especifica opcionalmente o nome de uma integração de catálogo configurada para o Snowflake Open Catalog. Se especificado, o Snowflake sincroniza a tabela com um catálogo externo em sua conta Snowflake Open Catalog. Para obter mais informações, consulte Sincronizar uma tabela gerenciada pelo Snowflake com Snowflake Open Catalog.
STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }
Especifica a política de serialização de armazenamento para a tabela. Se não for especificado na criação da tabela, a tabela herdará o valor definido no nível do esquema, do banco de dados ou da conta. Se o valor não for especificado em nenhum nível, a tabela usará o valor padrão.
Não é possível alterar o valor deste parâmetro após a criação da tabela.
COMPATIBLE
: o Snowflake realiza codificação e compactação que garantem a interoperabilidade com mecanismos de computação de terceiros.OPTIMIZED
: o Snowflake realiza a codificação e a compactação que garantem o melhor desempenho de tabela dentro do Snowflake.
Padrão:
OPTIMIZED
DATA_RETENTION_TIME_IN_DAYS = integer
Especifica o período de retenção para uma tabela gerenciada pelo Snowflake para que ações de Time Travel (SELECT, CLONE e UNDROP) possam ser executadas em dados históricos na tabela. Para obter mais informações, consulte Compreensão e uso do Time Travel.
Para uma descrição detalhada deste parâmetro de nível de objeto, bem como mais informações sobre parâmetros de objeto, consulte Parâmetros.
Valores:
Standard Edition:
0
ou1
Enterprise Edition:
0
a90
para tabelas permanentes
Padrão:
Standard Edition:
1
Enterprise Edition (ou superior):
1
(a menos que um valor padrão diferente tenha sido especificado no esquema, banco de dados ou nível de conta)
Nota
Um valor de
0
desabilita efetivamente o Time Travel para a tabela.
MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Parâ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.
CHANGE_TRACKING = { TRUE | FALSE }
Especifica se deve permitir o rastreamento de alterações na tabela.
TRUE
habilita o rastreamento de alterações na tabela. Esta configuração adiciona um par de colunas ocultas à tabela de origem e começa a armazenar os metadados de rastreamento de alterações nas colunas. Estas colunas consomem uma pequena quantidade de armazenamento.Os metadados de rastreamento de alterações podem ser consultados usando a cláusula CHANGES para instruções SELECT ou criando e consultando um ou mais fluxos na tabela.
FALSE
não permite o rastreamento de alterações na tabela.
Padrão: FALSE
DEFAULT_DDL_COLLATION = 'collation_specification'
Determina uma especificação de agrupamento padrão para as colunas da tabela, incluindo colunas adicionadas à tabela no futuro.
Para obter mais informações sobre o parâmetro, consulte DEFAULT_DDL_COLLATION.
COPY GRANTS
Especifica 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
CREATE TABLE … LIKE
CREATE TABLE … CLONE
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 PRIVILEGES
no 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. Você pode especificar um comentário no nível da coluna ou da tabela. A sintaxe de cada um é um pouco diferente.
Padrão: sem valor
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )
Especifica a política de acesso a linhas a ser definida em uma tabela.
AGGREGATION POLICY policy_name
Especifica a política de agregação a ser definida em uma tabela.
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 para objetos e colunas.
Requisitos de controle de acesso¶
Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:
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. |
Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.
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¶
Considerações para executar este comando:
Atualmente, as tabelas Iceberg entre nuvens e entre regiões não são suportadas quando você usa o Snowflake como o catálogo Iceberg. Se CREATE ICEBERG TABLE retornar uma mensagem de erro como
"External volume <nome_do_volume> must have a STORAGE_LOCATION defined in the local region ..."
, certifique-se de que seu volume externo esteja usando um local de armazenamento ativo na mesma região que sua conta Snowflake.Se você criou seu volume externo 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 exist
(ou um tipo similar de erro).Para ver um exemplo, consulte a seção Exemplos (neste tópico).
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 REPLACE
esteja 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.
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:
Se a tabela de origem tiver chaves de clustering, então a nova tabela terá chaves de clustering. Por padrão, o Clustering automático não é suspenso para a nova tabela, mesmo que o Clustering automático tenha sido suspenso para a tabela de origem.
CREATE ICEBERG TABLE … AS SELECT (CTAS):
Quando as chaves de clustering são especificadas em uma instrução CTAS:
As definições das colunas são necessárias e devem ser explicitamente especificadas na instrução.
Por padrão, o Clustering automático não é suspenso para a nova tabela – mesmo que o Clustering automático seja suspenso para a tabela de origem.
Se você quiser que a tabela seja criada com linhas em uma ordem específica, então use uma subcláusula ORDER BY na cláusula SELECT do CTAS. Especificar CLUSTER BY não agrupa os dados no momento em que a tabela é criada; em vez disso, CLUSTER BY depende do clustering automático para reter os dados ao longo do tempo.
A subcláusula ORDER BY em uma instrução CREATE TABLE não afeta a ordem das linhas devolvidas por futuras instruções SELECT naquela tabela. Para especificar a ordem das linhas nas futuras instruções SELECT, use uma subcláusula ORDER BY nessas instruções.
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.
Para solucionar problemas com a criação de uma tabela gerenciada pelo Snowflake, consulte Não é possível criar uma tabela gerenciada pelo Snowflake.
Exemplos¶
Criação de uma tabela Iceberg com Snowflake como catálogo¶
Este exemplo cria uma tabela Iceberg com Snowflake como catálogo Iceberg. A tabela resultante é gerenciada pelo Snowflake e oferece suporte ao acesso de leitura e gravação.
O exemplo define o nome da tabela (my_iceberg_table
) como o BASE_LOCATION
. Dessa forma, o Snowflake grava dados e metadados em um diretório com o mesmo nome da tabela no local do seu volume externo.
CREATE ICEBERG TABLE my_iceberg_table (amount int)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table';
Criação de uma tabela Iceberg usando a sintaxe de variante CTAS¶
Este exemplo usa a sintaxe da variante CREATE ICEBERG TABLE … AS SELECT para criar uma nova tabela Iceberg a partir de uma tabela chamada base_iceberg_table
. A cláusula AS SELECT deve estar no final da instrução.
CREATE OR REPLACE ICEBERG TABLE iceberg_table_copy (column1 int)
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'iceberg_table_copy'
AS SELECT * FROM base_iceberg_table;
Especificação de um volume externo com um identificador entre aspas duplas¶
Este exemplo cria uma tabela Iceberg com um volume externo cujo identificador contém aspas duplas. Os identificadores colocados entre aspas duplas diferenciam maiúsculas de minúsculas e geralmente contêm caracteres especiais.
O identificador "external_volume_1"
é especificado exatamente como foi criado (incluindo as aspas duplas). A não inclusão das aspas pode resultar em um erro Object does not exist
(ou um tipo similar de erro).
Para saber mais, consulte Identificadores entre aspas duplas.
CREATE OR REPLACE ICEBERG TABLE table_with_quoted_external_volume
EXTERNAL_VOLUME = '"external_volume_1"'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my/relative/path/from/external_volume';