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 oCREATE 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 definirOAUTH_REDIRECT_URI
comohttps://<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
No seu espaço de trabalho do Azure Databricks, clique em Catálogo.
Na parte superior do painel Catálogo, clique no í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.
Insira um nome de conexão amigável.
Selecione um tipo de conexão de Flocos de neve.
Insira as seguintes propriedades de conexão para seu armazém Snowflake.
-
Tipo de autenticação:
OAuth
,OAuth access token
, 'PEM Private Key' ouUsername 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, executeSELECT 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, executeSELECT 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.
-
Tipo de autenticação:
(Opcional) Clique em Testar conexão para confirmar se ela funciona.
(Opcional) Adicione um comentário.
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
No espaço de trabalho do Azure Databricks, clique em Catálogo para abrir o Gerenciador de Catálogos.
Na parte superior do painel Catálogo, clique no í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 .
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 emDATABASE
"database"
é convertido emdatabase
"database"""
é convertido emdatabase"
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: