Pular para o conteúdo principal

Habilitar federação de catálogo Snowflake

Este artigo mostra como habilitar a federação Snowflake usando a federação de catálogo. A federação de catálogos permite que Unity Catalog leia tabelas Iceberg gerenciadas Snowflake diretamente do armazenamento cloud , proporcionando melhor desempenho e custo-benefício em comparação com a federação de consultas.

Com a federação de catálogos, Unity Catalog acessa diretamente a tabela Iceberg do Snowflake no armazenamento de objetos. A consulta é executada exclusivamente usando Databricks compute, que é mais econômico e otimizado para o desempenho. As tabelas Snowflake que não sejam do tipo Iceberg não são elegíveis para federação de catálogo e são sempre acessadas por meio de federação de consultas.

Tanto a federação de catálogo quanto a federação de consulta dependem dos mesmos métodos de autenticação para configurar a conexão:

Antes de começar

Você deve atender aos seguintes requisitos para executar consultas federadas no Snowflake usando federação de catálogo:

Requisitos do workspace:

  • Espaço de trabalho habilitado para Unity Catalog. Os espaços de trabalho criados após 8 de novembro de 2023 são habilitados automaticamente para o Unity Catalog , incluindo o provisionamento automático do metastore. Você não precisa criar um metastore manualmente, a menos que seu workspace seja anterior à ativação automática e não tenha sido habilitado para Unity Catalog. Consulte Ativação automática do Unity Catalog.

Requisitos de computação:

  • Conectividade de rede do seu recurso compute aos sistemas de banco de dados de destino. Veja recomendações de rede para a Federação Lakehouse.
  • Databricks compute deve usar Databricks Runtime 13.3 LTS ou acima e o modo de acesso Padrão ou Dedicado .
  • Os SQL warehouse devem ser Pro ou Serverless e devem utilizar a versão 2023.40 ou superior.

Permissões necessárias:

  • Para criar uma conexão, você deve ser um administrador do metastore ou um usuário com o privilégio CREATE CONNECTION no metastore Unity Catalog anexado ao workspace. Em espaços de trabalho que foram habilitados para o Unity Catalog automaticamente, os administradores workspace têm o privilégio CREATE CONNECTION por default.
  • Para criar um catálogo estrangeiro, você deve ter a permissão CREATE CATALOG no metastore e ser o proprietário da conexão ou ter o privilégio CREATE FOREIGN CATALOG na conexão. Em espaços de trabalho que foram habilitados para o Unity Catalog automaticamente, os administradores workspace têm o privilégio CREATE CATALOG por default.

Outros requisitos de permissão são definidos em cada seção baseada em tarefa a seguir.

  • Use Databricks Runtime 16.4 LTS ou acima ou Databricks SQL.

Os passos gerais para configurar a federação de catálogo são semelhantes aos da configuração da federação de consulta: crie uma conexão com Snowflake primeiro e depois crie e configure um catálogo externo. No entanto, você também deve criar uma credencial de armazenamento e um local externo para os caminhos para as tabelas do Apache Iceberg registradas no Snowflake.

  1. Crie um local externo para tabelas Iceberg.

    Você deve configurar um local externo no Unity Catalog para controlar o acesso aos locais de armazenamento cloud que contêm as tabelas Iceberg registradas no seu banco de dados Snowflake . Locais externos são objetos protegíveis Unity Catalog que associam credenciais de armazenamento a caminhos de contêineres de armazenamento cloud . Veja Visão geral de locais externos.

    Você pode criar um local externo usando as seguintes interfaces:

    O local externo será especificado como um caminho autorizado durante a configuração do catálogo externo.

  2. Crie uma conexão com o Snowflake Horizon Catalog e crie um catálogo externo usando um dos métodos de autenticação listados acima. Você deve especificar um local no armazenamento cloud onde os metadados serão armazenados para tabelas Iceberg neste catálogo.

    Configurar um local de armazenamento no catálogo permite a leitura de tabelas Iceberg em um catálogo externo por meio do armazenamento de objetos. Ler ou gravar em tabelas Iceberg por meio do protocolo JDBC não estará mais disponível (tabelas não Iceberg não serão afetadas).

    Você também deve adicionar Caminhos autorizados, os caminhos de armazenamento cloud que podem ser acessados por meio do catálogo. Somente tabelas que se enquadram nesses caminhos podem ser consultadas por meio do catálogo federado. Os caminhos devem ser cobertos por locais externos.

    Você pode editar os caminhos autorizados após criar o catálogo. Consulte O que são caminhos autorizados?

Conceder permissões para acessar tabelas federadas

Os usuários devem configurar as permissões necessárias no Snowflake e Unity Catalog.

Conceder permissões ao Snowflake

A função Snowflake usada na conexão deve ter privilégios suficientes para ler os bancos de dados, esquemas e tabelas que você deseja federar. Executando o seguinte SQL no Snowflake:

SQL
GRANT USAGE ON DATABASE <db> TO ROLE <role>;
GRANT USAGE ON SCHEMA <db>.<schema> TO ROLE <role>;
GRANT SELECT ON ALL TABLES IN SCHEMA <db>.<schema> TO ROLE <role>;
GRANT SELECT ON FUTURE TABLES IN SCHEMA <db>.<schema> TO ROLE <role>;

Substituir:

  • <db> - o nome do banco de dados Snowflake a ser federado (por exemplo, MY_DATABASE).
  • <schema> - o nome do esquema dentro desse banco de dados (por exemplo, MY_SCHEMA).
  • <role> - a função Snowflake especificada nas credenciais de conexão (por exemplo, MY_DATABRICKS_ROLE).

A falta de concessões do Snowflake é uma causa comum para esquemas ou tabelas não aparecerem no catálogo federado.

Conceder permissões Unity Catalog

Após configurar a federação de catálogos, os usuários devem ter as permissões apropriadas do Unity Catalog para acessar as tabelas federadas:

  • Todos os usuários precisam de permissões USE CATALOG e USE SCHEMA no catálogo e no esquema, respectivamente.
  • Para tabelas Iceberg acessadas por meio de federação de catálogo, os usuários precisam da permissão MODIFY na tabela federada Unity Catalog .
  • Para ler da tabela federada, os usuários precisam da permissão SELECT .

Para obter mais informações sobre os privilégios Unity Catalog e como concedê-los, consulte Gerenciar privilégios no Unity Catalog.

Limitações da federação de catálogos

A execução de consultas federadas no Snowflake usando federação de catálogo tem as seguintes limitações:

  • Algumas tabelas iceberg só podem ser lidas usando federação de consultas:

    • Tabelas com locais incompatíveis com URI (que contêm caracteres especiais).
    • Tabelas com localização de metadados fora da localização da tabela.
    • Tabelas com locais que têm esquemas não suportados (somente s3, s3a, s3n, abfs, abfss, gs, r2, wasb e wasbs são suportados).
  • Tabelas Iceberg estrangeiras acessadas de mecanismos externos devem ser atualizadas usando REFRESH FOREIGN TABLE <table_name> para garantir consistência de leitura/gravação entre gravações no catálogo externo e leituras com o Unity Catalog.

  • Tabelas com nomes idênticos, ignorando maiúsculas e minúsculas, entram em conflito. A primeira tabela a ser carregada é a que aparece.

  • No Azure, as tabelas do Snowflake Iceberg não podem estar no local raiz do contêiner.

Consulte as limitações da tabela Iceberg para obter informações sobre as limitações relacionadas ao Iceberg.

Determinar se uma tabela Snowflake estrangeira usa federação de catálogo ou consulta

As tabelas Snowflake estrangeiras lidas usando a federação de catálogo exibem o formato de origem Iceberg no Catalog Explorer. As tabelas Iceberg lidas usando a federação de consultas exibem o formato de origem Snowflake no Catalog Explorer. As consultas executadas em tabelas com ambos os formatos de armazenamento são executadas usando federação de consultas, que usa Snowflake compute.

Modo de fallback

Quando você consulta uma tabela em um catálogo Snowflake federado, Databricks tenta automaticamente ler a tabela Iceberg diretamente do armazenamento cloud para um desempenho ideal. Se a tabela não atender aos critérios de acesso direto, o Databricks volta a federar a consulta ao Snowflake usando JDBC. A tabela a seguir descreve o fluxo de resolução de consulta:

Estágio de resolução de consulta

Descrição

Descoberta de catálogo

Durante o planejamento da consulta, o Databricks Runtime verifica com o Unity Catalog e detecta que a tabela reside em um catálogo federado do Snowflake.

Resolução de metadados do Snowflake

Usando a conexão do Unity Catalog, o Databricks Runtime emite consultas ao Snowflake para:

  • Verifique se a tabela de destino é uma tabela Iceberg.
  • Solicite o caminho metadata.json mais recente e o local da tabela.

Tentativa de acesso direto

Se algum dos critérios a seguir falhar, o Databricks Runtime federará a consulta usando o driver Snowflake JDBC. A tabela exibe o formato de origem do Snowflake no Catalog Explorer.

  • Tabelas com locais incompatíveis com URI, que contêm caracteres especiais.
  • Tabelas com localização de metadados fora da localização da tabela.
  • Tabelas com locais que possuem esquemas não suportados. Somente s3, s3a, s3n, abfs, abfss, gs, r2, wasb e wasbs são suportados.

Se todos os critérios forem atendidos, o Databricks Runtime verifica os metadados retornados e lê a tabela Iceberg diretamente do caminho de armazenamento de objetos. A tabela exibe o formato de origem do Iceberg no Catalog Explorer.

Solução de problemas

Nenhum esquema ou tabela aparece no catálogo federado.

Se os esquemas ou tabelas do seu banco de dados Snowflake não aparecerem após a configuração da federação de catálogo, a causa mais comum é que a função do Snowflake usada na conexão não possui as permissões necessárias. Verifique se a função tem USAGE no banco de dados e esquemas de destino e SELECT nas tabelas. Consulte Conceder permissões ao Snowflake.