Partilhar via


Executar consultas federadas no Snowflake

Este artigo descreve como configurar a Lakehouse Federation para executar consultas federadas em dados do Snowflake que não são gerenciados pelo Azure Databricks. Para saber mais sobre a Lakehouse Federation, consulte O que é Lakehouse Federation?.

Para se conectar ao seu banco de dados Snowflake usando a Lakehouse Federation, você deve criar o seguinte em seu metastore do Azure Databricks Unity Catalog:

  • Uma conexão com seu banco de dados Snowflake.
  • Um catálogo estrangeiro que espelha seu banco de dados Snowflake no Catálogo Unity para que você possa usar a sintaxe de consulta do Catálogo Unity e as ferramentas de governança de dados para gerenciar o acesso do usuário do Azure Databricks ao banco de dados.

Antes de começar

Requisitos do espaço de trabalho:

  • Espaço de trabalho habilitado para o Catálogo Unity.

Requisitos de computação:

  • Conectividade de rede do seu recurso de computação para os sistemas de banco de dados de destino. Consulte Recomendações de rede para a Lakehouse Federation.
  • A computação do Azure Databricks deve usar o Databricks Runtime 13.3 LTS ou superior e modo de acesso Compartilhado ou modo de acesso de usuário único .
  • Os armazéns SQL devem ser profissionais ou sem servidor e devem usar 2023.40 ou superior.

Permissões necessárias:

  • Para criar uma conexão, você deve ser um administrador de metastore ou um usuário com o CREATE CONNECTION privilégio no metastore do Unity Catalog anexado ao espaço de trabalho.
  • Para criar um catálogo estrangeiro, você deve ter a CREATE CATALOG permissão no metastore e ser o proprietário da conexão ou ter o CREATE FOREIGN CATALOG privilégio na conexão.

Os requisitos de permissão adicionais são especificados em cada seção baseada em tarefas a seguir.

  • Se você planeja autenticar usando OAuth, crie uma integração de segurança no console do Snowflake.
  • Se você planeja autenticar usando um token de acesso OAuth, também deve solicitar um token de acesso.

(Opcional) Criar uma integração de segurança no console do Snowflake

Se você quiser autenticar usando OAuth, siga esta etapa antes de criar uma conexão Snowflake. Para autenticar usando um nome de usuário e senha, ignore esta seção.

Nota

Apenas a integração OAuth integrada do Snowflake é suportada. Integrações OAuth externas como Okta ou Microsoft Entra ID não são suportadas.

No console Snowflake, execute CREATE SECURITY INTEGRATION. Substitua os seguintes valores:

  • <integration-name>: Um nome exclusivo para sua integração OAuth.

  • <workspace-url>: Uma URL do espaço de trabalho do Azure Databricks. Você deve definir OAUTH_REDIRECT_URI como https://<workspace-url>/login/oauth/snowflake.html, onde <workspace-url> é a URL exclusiva do espaço de trabalho do Azure Databricks onde você criará a conexão Snowflake.

  • <duration-in-seconds>: Um período de tempo para tokens de atualização.

    Importante

    OAUTH_REFRESH_TOKEN_VALIDITY é um campo personalizado definido como 90 dias por padrão. Depois que o token de atualização expirar, você deverá autenticar novamente a conexão. Defina o campo para um período de tempo razoável.

CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;

(Opcional) Solicitar um token de acesso OAuth

Siga as instruções de sobre como gerar e utilizar um token OAuth com o Snowflake OAuth para clientes customizados na Base de Conhecimento do Snowflake.

Criar uma conexão

Uma conexão especifica um caminho e credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, você pode usar o Gerenciador de Catálogos ou o CREATE CONNECTION comando SQL em um bloco de anotações do Azure Databricks ou no editor de consultas Databricks SQL.

Nota

Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar uma conexão. Consulte os comandos POST /api/2.1/unity-catalog/connections e Unity Catalog.

Permissões necessárias: administrador do Metastore ou usuário com o CREATE CONNECTION privilégio.

Explorador de Catálogos

  1. No seu espaço de trabalho do Azure Databricks, clique em Ícone do catálogoCatálogo.

  2. Na parte superior do painel Catálogo, clique no Ícone Adicionar ou maisícone Adicionar e selecione Adicionar uma conexão no menu.

    Como alternativa, na página Acesso rápido , clique no botão Dados externos > , vá para a guia Conexões e clique em Criar conexão.

  3. Insira um nome de conexão amigável.

  4. Selecione um tipo de conexão de Flocos de neve.

  5. Insira as seguintes propriedades de conexão para seu armazém Snowflake.

    • Tipo de autenticação: OAuth, OAuth access token, 'PEM Private Key' ou Username and password
    • Anfitrião: Por exemplo, snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Porto: Por exemplo, 443
    • Armazém de flocos de neve: Por exemplo, my-snowflake-warehouse
    • Usuário: Por exemplo, snowflake-user
    • (OAuth) ID do Cliente: No console do Snowflake, execute SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') para recuperar o ID do cliente para a integração de segurança.
    • (OAuth): Segredo do cliente: No console do Snowflake, execute SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') para recuperar o segredo do cliente para a integração de segurança.
    • (OAuth) Âmbito de cliente: refresh_token session:role:<role-name>. Especifique a função Floco de Neve a ser usada no <role-name>.
    • (Username and password) Senha: Por exemplo, password123
    • (OAuth access token) Token de acesso: Token de acesso de (Opcional) Solicite um token de acesso OAuth.
    • (OAuth access token) Expira em segundos: O tempo de expiração (em segundos) para o token de acesso de (Opcional) Solicitar um token de acesso OAuth (expires_in).
    • (PEM Private Key) chave privada PEM: Chave privada do par de chaves RSA no formato HEX64.
    • (PEM Private Key) Expira em segundos: O tempo de expiração (em segundos) para a conexão feita com uma chave privada.

    (OAuth) Você será solicitado a entrar no Snowflake usando suas credenciais OAuth.

  6. (Opcional) Clique em Testar conexão para confirmar se ela funciona.

  7. (Opcional) Adicione um comentário.

  8. Clique em Criar.

SQL

Execute o seguinte comando em um bloco de anotações ou no editor de consultas Databricks SQL.

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user '<user>',
  password '<password>'
);

Recomendamos que você use segredos do Azure Databricks em vez de cadeias de caracteres de texto sem formatação para valores confidenciais, como credenciais. Por exemplo:

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Para obter informações sobre como configurar segredos, consulte Gerenciamento de segredos.

Criar um catálogo estrangeiro

Um catálogo estrangeiro espelha um banco de dados em um sistema de dados externo para que você possa consultar e gerenciar o acesso aos dados nesse banco de dados usando o Azure Databricks e o Unity Catalog. Para criar um catálogo estrangeiro, use uma conexão com a fonte de dados que já foi definida.

Para criar um catálogo estrangeiro, você pode usar o Gerenciador de Catálogos ou o CREATE FOREIGN CATALOG comando SQL em um bloco de anotações do Azure Databricks ou no editor de consultas SQL.

Nota

Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar um catálogo. Consulte POST /api/2.1/unity-catalog/catalogs e comandos do Unity Catalog.

Permissões necessárias:CREATE CATALOG permissão no metastore e propriedade da conexão ou o CREATE FOREIGN CATALOG privilégio na conexão.

Explorador de Catálogos

  1. No espaço de trabalho do Azure Databricks, clique em Ícone do catálogoCatálogo para abrir o Gerenciador de Catálogos.

  2. Na parte superior do painel Catálogo, clique no Ícone Adicionar ou maisícone Adicionar e selecione Adicionar um catálogo no menu.

    Como alternativa, na página Acesso rápido , clique no botão Catálogos e, em seguida, clique no botão Criar catálogo .

  3. Siga as instruções para criar catálogos estrangeiros em Criar catálogos.

SQL

Execute o seguinte comando SQL em um bloco de anotações ou editor de consultas SQL. Os itens entre parênteses são opcionais. Substitua os valores de espaço reservado:

  • <catalog-name>: Nome do catálogo no Azure Databricks.
  • <connection-name>: O objeto de conexão que especifica a fonte de dados, o caminho e as credenciais de acesso.
  • <database-name>: Nome do banco de dados que você deseja espelhar como um catálogo no Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Identificadores de banco de dados que diferenciam maiúsculas de minúsculas

O database campo do catálogo estrangeiro é mapeado para um identificador de banco de dados Snowflake. Se o identificador do banco de dados Snowflake não diferenciar maiúsculas de minúsculas, o invólucro usado no catálogo <database-name> estrangeiro será preservado. No entanto, se o identificador do banco de dados Snowflake diferenciar maiúsculas de minúsculas, você deverá envolver o catálogo <database-name> estrangeiro entre aspas duplas para preservar o caso.

Por exemplo:

  • database é convertido em DATABASE

  • "database" é convertido em database

  • "database""" é convertido em database"

    Para escapar de uma aspa dupla, use outra aspa dupla.

  • "database"" resulta em um erro porque a aspa dupla não é escapada corretamente.

Para obter mais informações, consulte Requisitos de identificador na documentação do Snowflake.

Pushdowns suportados

As seguintes flexões são suportadas:

  • Filtros
  • Projeções
  • Limite
  • Associações
  • Agregados (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
  • Funções (funções String, funções matemáticas, dados, funções de carimbo de data/hora e carimbo de data/hora e outras funções diversas, como Alias, Cast, SortOrder)
  • Funções do Windows (DenseRank, Rank, RowNumber)
  • Ordenar

Mapeamentos de tipo de dados

Quando você lê de Snowflake para Spark, os tipos de dados são mapeados da seguinte maneira:

Tipo de floco de neve Tipo de faísca
decimal, número, numérico Tipo decimal
bigint, byteint, int, inteiro, smallint, tinyint Tipo inteiro
flutuar, flutuar4, flutuar8 Tipo de flutuação
duplo, precisão dupla, real Tipo Duplo
char, caractere, string, texto, tempo, varchar StringType
binário BinaryType
boolean BooleanType
data Tipo de Data
datetime, timestamp, timestamp_ltz, timestamp_ntz timestamp_tz Tipo de carimbo de data/hora

Limitações do OAuth

A seguir estão as limitações de suporte do OAuth:

  • O ponto de extremidade OAuth do Snowflake deve ser acessível a partir de IPs do plano de controle Databricks. Consulte Saída do plano de controle do Azure Databricks. O Snowflake suporta a configuração de políticas de rede no nível de integração de segurança, o que permite uma diretiva de rede separada que permite a conectividade direta do plano de controle Databricks para o ponto de extremidade OAuth para autorização.
  • Não há suporte para as opções de configuração de configuração de função Proxy, host Proxy, porta proxy e Snowflake. Especifique a função Snowflake como parte do escopo OAuth.

Recursos adicionais

Consulte os seguintes artigos na documentação do Snowflake: