Configuração de uma integração de catálogo para Snowflake Postgres

Integrar o catálogo Snowflake Postgres permite que o Snowflake acesse tabelas Apache Iceberg™ gerenciadas por uma instância do Snowflake Postgres. Ao criar uma integração de catálogo para o Snowflake Postgres, o Snowflake descobre automaticamente tabelas em seus bancos de dados Postgres e as disponibiliza como tabelas Iceberg somente para leitura.

As integrações de catálogo do Snowflake Postgres usam credenciais fornecidas para acessar dados e metadados de sua tabela no armazenamento em nuvem. Você não precisa configurar um volume externo nem gerenciar as credenciais de armazenamento separadamente.

Nota

Atualmente, as integrações do catálogo Snowflake Postgres são suportadas em apenas na AWS.

Pré-requisitos

  • Uma conta Snowflake com o recurso Snowflake Postgres ativado.

  • Uma instância do Postgres com estado READY. Para criar uma instância do Postgres, consulte CREATEPOSTGRESINSTANCE.

  • A função que cria a integração de catálogo deve ter os seguintes privilégios:

    • USAGE na instância do Postgres.

    • CREATE INTEGRATION na conta.

Considerações

Considere o seguinte ao usar uma integração do catálogo Snowflake Postgres:

  • As integrações do catálogo Snowflake Postgres sempre usam credenciais fornecidas. Você deve definir ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS. O modo EXTERNAL_VOLUME_CREDENTIALS é incompatível.

  • Você não precisa especificar REST_AUTHENTICATION. O Snowflake manipula automaticamente a autenticação com a instância do Postgres.

  • A atualização automática usa sondagem de metadados. Notificações de alteração são incompatíveis.

  • As tabelas são somente leitura. Operações de gravação em tabelas Iceberg gerenciadas pelo Postgres são incompatíveis.

  • Este recurso é incompatível com instâncias do Postgres que aceitam intermitência.

  • Esse recurso é compatível apenas com a AWS.

Criação de integração de catálogo para Snowflake Postgres

Para criar uma integração de catálogo para o Snowflake Postgres, use o comando CREATECATALOGINTEGRATION(Snowflake Postgres).

Por exemplo:

CREATE CATALOG INTEGRATION my_postgres_catalog_int
  CATALOG_SOURCE = SNOWFLAKE_POSTGRES
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = 'public'
  REST_CONFIG = (
    POSTGRES_INSTANCE = 'my_pg_instance'
    ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
    CATALOG_NAME = 'my_database'
  )
  ENABLED = TRUE;

Para obter a referência completa da sintaxe e dos parâmetros, consulte CREATECATALOGINTEGRATION(Snowflake Postgres).

Criação de uma tabela Iceberg

Depois da integração do catálogo, você pode criar tabelas Iceberg que fazem referência às tabelas em sua instância do Postgres. Ao criar uma tabela Iceberg com uma integração de catálogo Snowflake Postgres, você especifica a integração de catálogo e o nome da tabela conforme está no banco de dados Postgres.

Por exemplo:

CREATE ICEBERG TABLE my_iceberg_table
  CATALOG = 'my_postgres_catalog_int'
  CATALOG_TABLE_NAME = 'orders'
  AUTO_REFRESH = TRUE;

Onde:

  • CATALOG = '<catalog_integration_name>': especifica o nome da integração de catálogo. Obrigatório.

  • CATALOG_TABLE_NAME = '<table_name>': especifica o nome da tabela conforme está no banco de dados Postgres. Obrigatório.

  • CATALOG_NAMESPACE = '<schema_name>': (opcional) especifica o esquema Postgres em que a tabela está. O padrão é o valor CATALOG_NAMESPACE definido na integração do catálogo.

  • CATALOG_NAME = '<database_name>': (opcional) especifica o banco de dados Postgres em que a tabela está. O padrão é o valor CATALOG_NAME definido na integração do catálogo.

  • AUTO_REFRESH = TRUE: (opcional) habilita a atualização automática de metadados. Quando ativado, o Snowflake pesquisa periodicamente o catálogo em busca de alterações de metadados e atualiza a tabela de forma automática.

Nota

Você não precisa especificar um EXTERNAL_VOLUME ao criar uma tabela Iceberg com uma integração de catálogo Snowflake Postgres.

Criar um banco de dados vinculado a catálogo

Em vez de criar tabelas Iceberg individuais, você pode criar um banco de dados vinculado a catálogo que descobre e sincroniza automaticamente tabelas de seu banco de dados Postgres. Um banco de dados vinculado a catálogo cria esquemas correspondentes e tabelas Iceberg no Snowflake que continuam sincronizados com seu banco de dados Postgres.

Por exemplo:

CREATE DATABASE my_postgres_db
  LINKED_CATALOG = (
    CATALOG = my_postgres_catalog_int
    ALLOWED_WRITE_OPERATIONS = NONE
  );

Onde:

  • CATALOG = <catalog_integration_name>: especifica o nome da integração do catálogo Snowflake Postgres. Obrigatório. O banco de dados vinculado a catálogo sincroniza o banco de dados Postgres especificado pelo valor CATALOG_NAME na integração do catálogo.

  • ALLOWED_WRITE_OPERATIONS = NONE: necessário para bancos de dados vinculados a catálogos Snowflake Postgres. As tabelas Snowflake Postgres são somente leitura.

Após criar o banco de dados vinculado a catálogo, o Snowflake descobre automaticamente os namespaces e tabelas do banco de dados Postgres e gera os esquemas e tabelas Iceberg correspondentes. Para obter mais informações, consulte Usar um banco de dados vinculado a catálogo para tabelas Apache Iceberg™.

Consulta a tabelas Iceberg

Depois de criar uma tabela Iceberg ou um banco de dados vinculado a catálogo, você pode consultar as tabelas usando o padrão SQL:

SELECT * FROM my_iceberg_table;

Controle de acesso

A função de proprietário da integração de catálogo deve ter o privilégio USAGE na instância do Postgres. O Snowflake verifica esse privilégio quando você cria a integração de catálogo.

Qualquer função que tenha USAGE na integração do catálogo pode criar tabelas Iceberg que fazem referência a tabelas na instância do Postgres. Não são necessárias outras concessões na instância do Postgres. A função também precisa dos privilégios padrão do Snowflake para criar tabelas no banco de dados e esquema de destino.

Por exemplo, para conceder a outra função a capacidade de criar tabelas Iceberg usando a integração de catálogo:

GRANT USAGE ON INTEGRATION my_postgres_catalog_int TO ROLE analyst_role;
GRANT USAGE ON DATABASE my_db TO ROLE analyst_role;
GRANT USAGE ON SCHEMA my_db.public TO ROLE analyst_role;
GRANT CREATE ICEBERG TABLE ON SCHEMA my_db.public TO ROLE analyst_role;