CREATE DATABASE (vinculado a catálogo)

Cria um banco de dados vinculado a catálogo para tabelas Apache Iceberg™ que usam um catálogo Iceberg REST externo.

Sintaxe

CREATE DATABASE <name>
  LINKED_CATALOG = ( catalogParams ),
  [ EXTERNAL_VOLUME = '<external_vol>' ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

Onde:

catalogParams ::=
  CATALOG = '<catalog_int>',
  [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ]
  [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ]
  [ NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE } ]
  [ NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ]
  [ SYNC_INTERVAL_SECONDS = <value> ]
Copy

Parâmetros obrigatórios

name

Especifica o identificador do banco de dados vinculado a catálgoo. Deve ser único para sua conta.

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.

Parâmetros opcionais

EXTERNAL_VOLUME = my_external_vol

Especifica um volume externo que fornece acesso aos dados e metadados para suas tabelas Iceberg remotas.

Não é necessário se você estiver usando credenciais fornecidas.

COMMENT = 'string_literal'

Especifica um comentário para o banco de dados.

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 Cota de tags para objetos.

Parâmetros de catálogo (catalogParams)

CATALOG = catalog_int

Especifica o nome da integração de catálogo.

ALLOWED_NAMESPACES = ('namespace1', 'namespace2', ... )

Especifica opcionalmente um ou mais namespaces em seu catálogo remoto para limitar o escopo da descoberta automática de tabelas. O Snowflake sincroniza os namespaces especificados e todos os namespaces e tabelas descendentes deles. Se um namespace aninhado estiver na lista ALLOWED_NAMESPACES, mas você definir o parâmetro NAMESPACE_MODE como IGNORE_NESTED_NAMESPACE, o Snowflake não sincronizará o namespace aninhado ou quaisquer esquemas e tabelas sob ele.

BLOCKED_NAMESPACES = ('namespace1', 'namespace2', ... )

Especifica opcionalmente um ou mais namespaces em seu catálogo remoto para bloquear a descoberta automática de tabelas.

O Snowflake bloqueia os namespaces especificados e todos os namespaces e tabelas descendentes deles.

Se você especificar ALLOWED_NAMESPACES e BLOCKED_NAMESPACES, a lista BLOCKED_NAMESPACES tem precedência. Por exemplo, se ns1.ns2 for permitido, mas ns1 estiver bloqueado, então o Snowflake não sincronizará ns1.ns2.

NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE }

Especifica como o Snowflake trata namespaces para tabelas Iceberg no banco de dados vinculado a catálogo.

  • IGNORE_NESTED_NAMESPACE: O Snowflake vincula apenas tabelas no primeiro nível de namespace para seu catálogo.

  • FLATTEN_NESTED_NAMESPACE: O Snowflake vincula tabelas em todos os níveis de namespace para seu catálogo. Para uma tabela em um namespace aninhado, o Snowflake usa o parâmetro NAMESPACE_FLATTEN_DELIMITER para construir um namespace nivelado. Com essa opção, você deve definir o parâmetro NAMESPACE_FLATTEN_DELIMITER.

    Por exemplo, considere uma tabela chamada iceberg_table_5 no namespace namespace3aa:

    my_catalog_linked_db
    |-- namespace3
    |   |-- namespace3a
    |       |-- namespace3aa
    |           |-- iceberg_table_5
    
    Copy

    Se você definir NAMESPACE_FLATTEN_DELIMITER = "/", poderá especificar "my_catalog_linked_db"."namespace3/namespace3a/namespace3aa"."iceberg_table_5" para fazer referência à tabela.

Padrão: IGNORE_NESTED_NAMESPACE

NAMESPACE_FLATTEN_DELIMITER = 'string_literal'

Obrigatório se você definir NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE. Especifica um delimitador, que o Snowflake usa para construir namespaces nivelados para tabelas em seu catálogo.

Importante

O caractere que você escolhe para um delimitador não pode aparecer em seus namespaces remotos. Durante o processo de descoberta automática, o Snowflake ignora qualquer namespace que contenha o delimitador e não cria um esquema correspondente no banco de dados vinculado ao catálogo.

Caracteres válidos: Quaisquer caracteres permitidos em Identificadores Snowflake.

SYNC_INTERVAL_SECONDS = 'value'

Especifica o intervalo de tempo (em segundos) que o Snowflake deve usar para descobrir automaticamente esquemas e tabelas em seu catálogo remoto.

Valores: 30 a 86400 (1 dia), inclusivo

Padrão: 30 segundos

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 DATABASE

Conta

Necessário para criar um novo banco de dados.

Only the SYSADMIN role, or a higher role, has this privilege by default. The privilege can be granted to additional roles as needed.

USAGE

Volume externo

Necessário para fazer referência a um volume externo existente.

USAGE

Integração de catálogo

Necessário para fazer referência a uma integração de catálogo existente.

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

  • Suportado somente quando você usa uma integração de catálogo para Iceberg REST (por exemplo, Snowflake Open Catalog).

  • Faturamento: Durante o período de versão preliminar, o Snowflake não cobra por bancos de dados vinculados a catálogos. O faturamento começa quando bancos de dados vinculados a catálogos Apache Iceberg™ se tornam disponíveis ao público em geral.

  • Para limitar a descoberta automática de tabelas a um conjunto específico de namespaces, use o parâmetro ALLOWED_NAMESPACES. Você também pode usar o parâmetro BLOCKED_NAMESPACES para bloquear um conjunto de namespaces.

  • O Snowflake não sincroniza o controle de acesso a catálogo remoto (usuários ou funções).

  • Você pode criar esquemas ou tabelas Iceberg gerenciadas externamente em um banco de dados vinculado a catálogos. Atualmente, não há suporte para a criação de outros objetos Snowflake.

  • Latência:

    • Para bancos de dados vinculados a 7.500 namespaces em um catálogo remoto, a descoberta de namespaces e tabelas leva cerca de uma hora.

    • Para catálogos remotos com 500 mil tabelas, o processo de atualização automatizada leva cerca de uma hora para ser concluído. Para namespaces com diferentes requisitos de latência, recomendamos a criação de bancos de dados vinculados a catálogos separados. Cada banco de dados deve referenciar uma integração de catálogo com um intervalo de atualização automática apropriado (REFRESH_INTERVAL_SECONDS).

  • Para tabelas Iceberg em um banco de dados vinculado a catálogo:

    • O Snowflake não copia propriedades de tabelas de catálogo remoto (como políticas de retenção ou buffers) e atualmente não oferece suporte à alteração de propriedades de tabela.

    • A atualização automática está habilitada por padrão. Se o table-uuid de uma tabela externa e a tabela do banco de dados vinculado a catálogo não corresponderem, a atualização falhará e o Snowflake removerá a tabela do banco de dados vinculado a catálogo; o Snowflake não alterará a tabela remota.

    • Se você remover uma tabela do catálogo remoto, o Snowflake a removerá do banco de dados vinculado a catálogo. Essa ação é assíncrona; portanto, você pode não ver a alteração no catálogo remoto imediatamente.

    • Se você renomear uma tabela no catálogo remoto, o Snowflake removerá a tabela existente do banco de dados vinculado a catálogo e criará uma tabela com o novo nome.

    • Políticas de mascaramento e tags são aceitas. Outros recursos específicos do Snowflake, incluindo replicação, clonagem e compartilhamento, não são aceitos.

    • O caractere escolhido para o parâmetro NAMESPACE_FLATTEN_DELIMITER não pode aparecer em seus namespaces remotos. Durante o processo de descoberta automática, o Snowflake ignora qualquer namespace que contenha o delimitador e não cria um esquema correspondente no seu banco de dados vinculado a catálogo.

    • Se você especificar algo diferente de _, $, letras maiúsculas ou números para o parâmetro NAMESPACE_FLATTEN_DELIMITER, deverá colocar o nome do esquema entre aspas ao consultar a tabela.

    • Para bancos de dados vinculados ao AWS Glue, você deve usar letras minúsculas e colocar os nomes do esquema, da tabela e das colunas entre aspas duplas. Isso também é necessário para outros catálogos Iceberg REST que aceitam apenas identificadores em minúsculas.

      O exemplo a seguir mostra uma consulta válida:

      CREATE SCHEMA "s1";
      
      Copy

      As instruções a seguir não são válidas porque usam letras maiúsculas ou omitem as aspas duplas:

      CREATE SCHEMA s1;
      CREATE SCHEMA "Schema1";
      
      Copy
    • O uso de UNDROP ICEBERG TABLE não é aceito.

    • Compartilhamentos com uma listagem são aceitos para tabelas que usam um volume externo. No momento, o compartilhamento direto não é aceito.

  • Para gravar em tabelas em um banco de dados vinculado a catálogo:

    • As credenciais fornecidas não são aceitas.

    • Gravações em tabelas em namespaces aninhados não são aceitas no momento.

  • Para ALLOWED_NAMESPACES e BLOCKED_NAMESPACES, o Snowflake não armazena namespaces aninhados se o conjunto já contiver o namespace pai. Por exemplo, se você criar um banco de dados e especificar ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3'), o Snowflake só armazenará ns1 já que os outros dois são incluídos automaticamente. Se você usar GET_DDL no banco de dados de exemplo, o Snowflake retornará ALLOWED_NAMESPACES = ('ns1'). O mesmo se aplica a BLOCKED_NAMESPACES.

  • Para consultar tabelas em um banco de dados vinculado a catálogo:

    • O Snowflake converte automaticamente identificadores sem aspas (nomes de tabelas e colunas) para letras maiúsculas. Se o seu catálogo Iceberg externo usar identificadores que diferenciam maiúsculas de minúsculas, você deverá colocar os nomes das tabelas e colunas entre aspas duplas.

      Para obter mais informações sobre identificadores de objetos, consulte Requisitos para identificadores.

  • 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 um banco de dados vinculado a catálogo com namespaces aninhados nivelados.

CREATE DATABASE my_linked_db
  LINKED_CATALOG = (
    CATALOG = 'my_catalog_int',
    NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
    NAMESPACE_FLATTEN_DELIMITER = '-'
  )
  EXTERNAL_VOLUME = 'my_external_vol';
Copy

Crie um banco de dados vinculado a catálogo que use credenciais fornecidas e especifique um namespace permitido:

CREATE DATABASE my_linked_db
  LINKED_CATALOG = (
    CATALOG = 'my_catalog_int_vended_creds',
    ALLOWED_NAMESPACES = ('my_namespace')
  );
Copy