CREATE CATALOG INTEGRATION (Apache Iceberg™ REST)

Cria uma nova integração de catálogo na conta ou substitui uma integração de catálogo existente para Tabelas Apache Iceberg™ gerenciadas em um catálogo remoto em conformidade com a especificação OpenAPI REST Apache Iceberg™ de código aberto.

Nota

Para criar uma integração para o Snowflake Open Catalog, consulte CREATE CATALOG INTEGRATION (Snowflake Open Catalog).

Consulte também:

ALTER CATALOG INTEGRATION, DROP CATALOG INTEGRATION, SHOW CATALOG INTEGRATIONS, DESCRIBE CATALOG INTEGRATION

Sintaxe

CREATE [ OR REPLACE ] CATALOG INTEGRATION [ IF NOT EXISTS ] <name>
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<namespace>'
  REST_CONFIG = (
    restConfigParams
  )
  REST_AUTHENTICATION = (
    restAuthenticationParams
  )
  ENABLED = { TRUE | FALSE }
  [ REFRESH_INTERVAL_SECONDS = <value> ]
  [ COMMENT = '<string_literal>' ]
Copy

Onde:

restConfigParams ::=

  CATALOG_URI = '<rest_api_endpoint_url>'
  PREFIX = '<prefix>'
  WAREHOUSE = '<warehouse_name>'
  CATALOG_API_TYPE = { PUBLIC | AWS_API_GATEWAY | AWS_PRIVATE_API_GATEWAY }
Copy

Os restAuthenticationParams são os seguintes, dependendo do seu método de autenticação:

OAuth

restAuthenticationParams (for OAuth) ::=

  TYPE = OAUTH
  OAUTH_TOKEN_URI = 'https://<token_server_uri>'
  OAUTH_CLIENT_ID = '<oauth_client_id>'
  OAUTH_CLIENT_SECRET = '<oauth_client_secret>'
  OAUTH_ALLOWED_SCOPES = ('<scope_1>', '<scope_2>')
Copy

Token de portador

restAuthenticationParams (for Bearer token) ::=

  TYPE = BEARER
  BEARER_TOKEN = '<bearer_token>'
Copy

SigV4

restAuthenticationParams (for SigV4) ::=

  TYPE = SIGV4
  SIGV4_IAM_ROLE = '<iam_role_arn>'
  SIGV4_SIGNING_REGION = '<region>'
Copy

Parâmetros

name

Cadeia de caracteres que especifica o identificador (nome) para a integração de catálogo; deve ser única em 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.

CATALOG_SOURCE = ICEBERG_REST

Especifica que a origem do catálogo é um catálogo REST compatível com a especificação REST Apache Iceberg.

TABLE_FORMAT = ICEBERG

Especifica ICEBERG como o formato de tabela fornecido pelo catálogo.

CATALOG_NAMESPACE = 'namespace'

Especifica o namespace no catálogo externo. O Snowflake usa esse namespace para todas as tabelas Iceberg que você associou a esta integração de catálogo.

É possível substituir esse valor especificando um namespace no nível da tabela ao criar uma tabela.

ENABLED = { TRUE | FALSE }

Especifica se a integração do catálogo está disponível para uso em tabelas Iceberg.

  • TRUE permite que os usuários criem novas tabelas Iceberg que fazem referência a esta integração.

  • FALSE impede que os usuários criem novas tabelas Iceberg que referenciem esta integração.

REFRESH_INTERVAL_SECONDS = value

Especifica o número de segundos que o Snowflake aguarda entre as tentativas de pesquisar o catálogo Iceberg externo para atualizações de metadados para atualização automatizada.

Valores: 30 a 86400, inclusivo

Padrão: 30 segundos

COMMENT = 'string_literal'

Cadeia de caracteres (literal) que especifica um comentário da integração.

Padrão: sem valor

Parâmetros de configuração REST (restConfigParams)

CATALOG_URI = 'rest_api_endpoint_url'

O URL do ponto de extremidade para a API REST de seu catálogo.

PREFIX

Especifica opcionalmente um prefixo para anexar a todas as rotas da API.

WAREHOUSE

Especifica opcionalmente o local do warehouse ou o identificador da solicitação de seu serviço de catálogo remoto.

CATALOG_API_TYPE = { PUBLIC | AWS_API_GATEWAY | AWS_PRIVATE_API_GATEWAY }

Especifica opcionalmente o tipo de conexão para a API do catálogo.

Padrão: PUBLIC

Parâmetros de autenticação REST (restAuthenticationParams)

OAuth

TYPE = OAUTH

Especifica OAuth como o tipo de autenticação que o Snowflake deve usar para se conectar-se ao seu catálogo REST Iceberg.

OAUTH_TOKEN_URI = token_server_uri

URL opcional para seu provedor de identidade de terceiros. Se não for especificado, o Snowflake assume que o provedor de catálogo remoto é o provedor de identidade OAuth.

OAUTH_CLIENT_ID = oauth_client_id

Seu ID de cliente OAuth2.

OAUTH_CLIENT_SECRET = oauth_client_secret

Seu segredo de cliente OAuth2.

OAUTH_ALLOWED_SCOPES = ( 'scope_1', 'scope_2' )

O escopo do token de OAuth. A especificação de API REST Iceberg inclui apenas um escopo, mas os catálogos podem oferecer suporte a mais de um escopo em sua implementação.

Token de portador

TYPE = BEARER

Especifica um token de portador como o tipo de autenticação que o Snowflake usará para se conectar ao seu catálogo REST Iceberg.

BEARER_TOKEN = bearer_token

O token de portador para seu provedor de identidade. Como alternativa, você pode especificar um token de acesso pessoal (PAT).

SigV4

TYPE = SIGV4

Especifica a versão 4 de assinatura como o tipo de autenticação que o Snowflake usará para se conectar ao seu catálogo REST Iceberg.

SIGV4_IAM_ROLE = 'iam_role_arn'

Especifica o nome de recurso da Amazon (ARN) para uma função IAM com permissão para acessar sua API REST no gateway da API.

SIGV4_SIGNING_REGION = 'region'

Especifica opcionalmente a região AWS associada à sua API no gateway da API. Se você não especificar esse parâmetro, o Snowflake usará a região na qual sua conta Snowflake está implementada.

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 INTEGRATION

Conta

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

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

  • As integrações de catálogo fornecem acesso somente leitura a catálogos Iceberg externos.

  • Não é possível modificar uma integração de catálogo existente; use uma instrução CREATE OR REPLACE CATALOG INTEGRATION.

  • Não é possível descartar ou substituir uma integração de catálogo se uma ou mais tabelas Apache Iceberg™ estiverem associadas à integração de catálogo.

    Para visualizar as tabelas que dependem de uma integração de catálogo, você pode usar o comando SHOW ICEBERG TABLES e uma consulta usando RESULT_SCAN que filtra na coluna catalog_name.

    Nota

    O identificador da coluna (catalog_name) diferencia maiúsculas de minúsculas. Especifique o identificador da coluna exatamente como ele aparece na saída SHOW ICEBERG TABLES.

    Por exemplo:

    SHOW ICEBERG TABLES;
    
    SELECT * FROM TABLE(
      RESULT_SCAN(
          LAST_QUERY_ID()
        )
      )
      WHERE "catalog_name" = 'my_catalog_integration_1';
    
    Copy
  • 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.

  • 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.

Exemplos

O exemplo a seguir cria uma integração de catálogo REST que usa OAuth para se conectar ao tabular.

CREATE OR REPLACE CATALOG INTEGRATION tabular_catalog_int
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = 'default'
  REST_CONFIG = (
    CATALOG_URI = 'https://api.tabular.io/ws'
    WAREHOUSE = '<tabular_warehouse_name>'
  )
  REST_AUTHENTICATION = (
    TYPE = OAUTH
    OAUTH_TOKEN_URI = 'https://api.tabular.io/ws/v1/oauth/tokens'
    OAUTH_CLIENT_ID = '<oauth_client_id>'
    OAUTH_CLIENT_SECRET = '<oauth_client_secret>'
    OAUTH_ALLOWED_SCOPES = ('catalog')
  )
  ENABLED = TRUE;
Copy