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 o seu banco de dados Snowflake no Unity Catalog para que possa utilizar a sintaxe de consultas do Unity Catalog e as ferramentas de governança de dados para gerir o acesso dos utilizadores do Azure Databricks ao banco de dados.

Antes de começar

Requisitos do espaço de trabalho:

  • Espaço de trabalho ativado para o Unity Catalog.

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 Standard ou Dedicated.
  • 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 privilégio de CREATE CONNECTION no metastore do Unity Catalog anexado ao espaço de trabalho.
  • 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 de CREATE FOREIGN CATALOG 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.

Na consola do 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. Configurar o campo para um comprimento 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 How To: Gerar e usar um token OAuth usando o Snowflake OAuth para clientes personalizados na Snowflake Knowledge Base.

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 comando CREATE CONNECTION 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 POST /api/2.1/unity-catalog/connections e comandos do 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 ícone CatálogoCatálogo.

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

    Como alternativa, na página de acesso rápido, clique no botão dados externos >, vá para o separador Conexões e clique em Criar conexão.

  3. Na página Noções básicas de conexão do assistente Configurar conexão, insira um Nome da conexãoque seja fácil de usar .

  4. Selecione um Tipo de conexão de Snowflake.

  5. Para o tipo de autenticação, selecione Username and password (autenticação básica), OAuth access token, PEM Private Keyou OAuth no menu suspenso.

  6. (Opcional) Adicione um comentário.

  7. Clique Avançar.

  8. Insira os seguintes detalhes de autenticação e conexão para seu armazém Snowflake. As propriedades específicas do método de autenticação selecionado são precedidas pelo Auth type entre parênteses.

    • Anfitrião: Por exemplo, snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • Porto: Por exemplo, 443

    • Usuário: Por exemplo, snowflake-user

    • (Autenticação básica) Palavra-passe: Por exemplo, password123

    • (Token de acesso OAuth) Token de acesso: Token de acesso proveniente de (Opcional) Solicite um token de acesso OAuth.

    • (Token de acesso OAuth) 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).

    • (OAuth) ID do Cliente: No console do Snowflake, execute SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') para recuperar a 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 OAuth: refresh_token session:role:<role-name>. Especifique a função Floco de Neve a ser usada no <role-name>.

    • (OAuth) Entrar com o Snowflake: Clique e entre no Snowflake usando suas credenciais OAuth.

    • (Chave privada PEM) 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.

      Após iniciar sessão com sucesso, é direcionado novamente para o assistente de Configurar ligação.

  9. Clique em Criar conexão.

  10. (Autenticação básica) Na página Detalhes da Conexão, especifique o seguinte:

    • Armazém de flocos de neve: Por exemplo, my-snowflake-warehouse
    • (Opcional) Host de proxy: Host do proxy usado para se conectar ao Snowflake. Você também deve selecionar Usar proxy e especificar Porta de proxy.
    • (Opcional) Usar proxy: Se deseja se conectar ao Snowflake usando um servidor proxy.
    • (Opcional) Porta de proxy: Porta do proxy usado para se conectar ao Snowflake. Você também deve selecionar Usar proxy e especificar Anfitrião do proxy.
    • (Opcional) função Snowflake: A função de segurança padrão a ser usada para a sessão após a conexão.
  11. Clique Avançar.

  12. Na página Noções básicas do catálogo, insira um nome para o 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.

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

  14. Clique Criar catálogo.

  15. Na página de acesso , selecione os espaços de trabalho onde os utilizadores podem aceder ao catálogo que criou. Você pode selecionar Todos os espaços de trabalho têm acessoou clicar em Atribuir a espaços de trabalho, selecione os espaços de trabalho e clique em Atribuir.

  16. Altere o Proprietário para gerir o acesso a todos os objetos no catálogo. Comece a digitar uma entidade na caixa de texto e clique na entidade nos resultados retornados.

  17. Conceda privilégios no catálogo. Clique Conceder:

    1. Especifique os Principals que terão acesso aos objetos no catálogo. Comece a digitar um principal na caixa de texto e clique no principal nos resultados.
    2. Selecione as predefinições de privilégio , para conceder a cada principal. Todos os usuários da conta recebem BROWSE por padrão.
      • Selecione Leitor de Dados no menu suspenso para conceder privilégios read a objetos no catálogo.
      • Selecione Editor de Dados no menu suspenso para conceder privilégios read e modify sobre objetos no catálogo.
      • Selecione manualmente os privilégios a conceder.
    3. Clique Conceder.
  18. Clique Avançar.

  19. Na página Metadados, especifique pares de chave-valor das etiquetas. Para obter mais informações, consulte Aplicar tags a objetos protegíveis do Unity Catalog.

  20. (Opcional) Adicione um comentário.

  21. Clique Salvar.

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 utilize o Azure Databricks segredos em vez de cadeias de texto simples para informações 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

Nota

Se você usar a interface do usuário para criar uma conexão com a fonte de dados, a criação de catálogo estrangeiro será incluída e você poderá ignorar esta etapa.

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 comando CREATE FOREIGN CATALOG SQL em um bloco de anotações do Azure Databricks ou no editor de consultas SQL. Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar um catálogo. Veja POST /api/2.1/unity-catalog/catalogs e comandos do Unity Catalog.

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

Explorador de Catálogos

  1. No seu espaço de trabalho do Azure Databricks, clique ícone Catálogo Catálogo para abrir o Explorador de Catálogos.

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

    Como alternativa, a partir da página de 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 dos marcadores de posição.

  • <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 sensíveis a maiúsculas e minúsculas

O campo database do catálogo estrangeiro corresponde a 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 estrangeiro <database-name> será preservado. No entanto, se o identificador do banco de dados Snowflake diferenciar maiúsculas de minúsculas, você deverá envolver o catálogo estrangeiro <database-name> entre aspas duplas para preservar o caso.

Por exemplo:

  • database é convertido em DATABASE

  • "database" é convertido em database

  • "database""" é convertido em database"

    Para escapar de aspas duplas, use outras aspas duplas.

  • "database"" resulta em erro porque as aspas duplas não foram corretamente escapadas.

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
  • Junções
  • Agregados (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
  • Funções (Funções de String, Funções Matemáticas, Funções de Dados, Funções de Data, Hora e Timestamp, e outras funções diversas, como Alias, Conversão de Tipo, Ordem de Classificação)
  • Funções do Windows (DenseRank, Rank, RowNumber)
  • Ordenar

Mapeamentos de tipo de dados

Quando se 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, integer, 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 TipoBinário
boolean Tipo Booleano
data Tipo de Data
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz Tipo de timestamp

Limitações do OAuth

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

  • O endpoint OAuth do Snowflake deve ser acessível a partir de IPs do plano de controlo do Databricks. Consulte Saída do plano de controle do Azure Databricks. Snowflake suporta a configuração de políticas de rede no nível de integração de segurança, o que permite uma política de rede separada que permite a conectividade direta do plano de controlo do Databricks para o endpoint OAuth para autorização.
  • As opções de configuração de uso de Proxy, host de Proxy, porta de Proxy, e configuração de função do Snowflake não são suportadas. Especifique Snowflake role como parte do âmbito OAuth.

Limitações da chave privada PEM

A seguir estão as limitações de suporte de chave privada do PEM:

  • O driver JDBC Snowflake não suporta autenticação com chaves privadas criptografadas. Para evitar erros, gere uma chave com -nocrypt opção adicionada, da seguinte forma:

    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    

Recursos adicionais

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