execução de consultas federadas sobre Snowflake
Este artigo descreve como configurar o Lakehouse Federation para executar consultas federadas nos dados do site Snowflake que não são gerenciados pelo site Databricks. Para saber mais sobre a lakehouse Federation, consulte O que é a lakehouse Federation?
Para se conectar ao banco de dados Snowflake usando a Lakehouse Federation, o senhor deve criar o seguinte no metastore Databricks Unity Catalog :
- Uma conexão com o banco de dados do Snowflake.
- Um catálogo externo que espelha o banco de dados do Snowflake no Unity Catalog para que o senhor possa usar a sintaxe de consulta do Unity Catalog e as ferramentas de governança de dados para gerenciar o acesso do usuário do Databricks ao banco de dados.
Antes de começar
Requisitos do workspace:
- Espaço de trabalho preparado para o Catálogo do Unity.
Requisitos de computação:
- Conectividade de rede do seu recurso compute para os sistemas de banco de dados de destino. Veja as recomendações do Networking para a Lakehouse Federation.
- Databricks compute O senhor deve usar Databricks Runtime 13.3 LTS ou acima e o modo de acesso Standard ou Dedicated .
- 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, é preciso ser administrador de metastore ou usuário com o privilégio
CREATE CONNECTION
no metastore do Unity Catalog anexado ao espaço de trabalho. - Para criar um catálogo externo é preciso ter a permissão
CREATE CATALOG
no metastore e ser proprietário da conexão ou ter o privilégioCREATE FOREIGN CATALOG
na conexão.
Outros requisitos de permissão são definidos em cada seção baseada em tarefa a seguir.
- Se planeja autenticar usando o OAuth, crie uma integração de segurança no console do Snowflake.
- Se o senhor planeja se autenticar usando tokens de acesso OAuth, também deve solicitar tokens de acesso.
(Opcional) Crie uma integração de segurança no console do Snowflake
Se o senhor quiser se autenticar usando o OAuth, siga esta etapa antes de criar uma conexão Snowflake. Para autenticar usando um nome de usuário e senha em vez disso, pule esta seção.
Somente a integração Snowflake's integrada OAuth é suportada. Não há suporte para integrações OAuth externas, como Okta ou Microsoft Entra ID.
No console Snowflake, execute CREATE SECURITY INTEGRATION
. Substitua os seguintes valores:
-
<integration-name>
: Um nome exclusivo para sua integração OAuth. -
<workspace-url>
: A Databricks workspace URL. O senhor deve definirOAUTH_REDIRECT_URI
comohttps://<workspace-url>/login/oauth/snowflake.html
, em que<workspace-url>
é o URL exclusivo do site Databricks workspace onde criará a conexão Snowflake. -
<duration-in-seconds>
: Uma duração de tempo para refresh tokens.
OAUTH_REFRESH_TOKEN_VALIDITY
é um campo personalizado que é definido como 90 dias por default. Depois que os tokens refresh expirarem, o senhor 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) Solicite um OAuth access tokens
Siga How To: Generate and use an OAuth tokens using Snowflake OAuth for custom clients na base de conhecimento Snowflake.
Crie uma conexão
A conexão especifica um caminho e as credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, você pode usar o Catalog Explorer ou o comando CREATE CONNECTION
do SQL em um Notebook do Databricks ou no editor de consultas SQL do Databricks.
O senhor também pode usar a API REST da Databricks ou a CLI da Databricks para criar uma conexão. Veja POST /api/2.1/unity-catalog/connections e Unity Catalog comando.
Permissões necessárias: Administrador do Metastore ou usuário com o privilégio CREATE CONNECTION
.
- Catalog Explorer
- SQL
-
In your Databricks workspace, click
Catalog.
-
At the top of the Catalog pane, click the
Add icon and select Add a connection from the menu.
Alternatively, from the Quick access page, click the External data > button, go to the Connections tab, and click Create connection.
-
On the Connection basics page of the Set up connection wizard, enter a user-friendly Connection name.
-
Select a Connection type of Snowflake.
-
For Auth type, select
Username and password
(basic authentication),OAuth access token
,PEM Private Key
, orOAuth
from the drop-down menu. -
(Optional) Add a comment.
-
Click Next.
-
Enter the following authentication and connection details for your Snowflake warehouse. Properties that are specific to the authentication method you selected are preceded by the
Auth type
in parentheses.-
Host: For example,
snowflake-demo.east-us-2.azure.snowflakecomputing.com
-
Port: For example,
443
-
User: For example,
snowflake-user
-
(Basic authentication) Password: For example,
password123
-
(OAuth access token) Access token: Access token from (Optional) Request an OAuth access token.
-
(OAuth access token) Expires in secs: The expiration time (in seconds) for the access token from (Optional) Request an OAuth access token (
expires_in
). -
(OAuth) Client ID: In the Snowflake console, run
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>')
to retrieve the client ID for the security integration. -
(OAuth) Client secret: In the Snowflake console, run
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>')
to retrieve the client secret for the security integration. -
(OAuth) OAuth scope:
refresh_token session:role:<role-name>
. Specify the Snowflake role to use in<role-name>
. -
(OAuth) Sign in with Snowflake: Click and sign in to Snowflake using your OAuth credentials.
-
(PEM Private Key) PEM private key: Private key from RSA key par in HEX64 format.
-
(PEM Private Key) Expires in secs: The expiration time (in seconds) for the connection made with a private key.
Upon successful sign-in, you are directed back to the Set up connection wizard.
-
-
Click Create connection.
-
(Basic authentication) On the Connection details page, specify the following:
- Snowflake warehouse: For example,
my-snowflake-warehouse
- (Optional) Proxy host: Host of the proxy used to connect to Snowflake. You must also select Use proxy and specify Proxy port.
- (Optional) Use proxy: Whether to connect to Snowflake using a proxy server.
- (Optional) Proxy port: Port of the proxy used to connect to Snowflake. You must also select Use proxy and specify Proxy host.
- (Optional) Snowflake role: The default security role to use for the session after connecting.
- Snowflake warehouse: For example,
-
Click Next.
-
On the Catalog basics page, enter a name for the foreign catalog. A foreign catalog mirrors a database in an external data system so that you can query and manage access to data in that database using Databricks and Unity Catalog.
-
(Optional) Click Test connection to confirm that it works.
-
Click Create catalog.
-
On the Access page, select the workspaces in which users can access the catalog you created. You can select All workspaces have access, or click Assign to workspaces, select the workspaces, and then click Assign.
-
Change the Owner who will be able to manage access to all objects in the catalog. Start typing a principal in the text box, and then click the principal in the returned results.
-
Grant Privileges on the catalog. Click Grant:
- Specify the Principals who will have access to objects in the catalog. Start typing a principal in the text box, and then click the principal in the returned results.
- Select the Privilege presets to grant to each principal. All account users are granted
BROWSE
by default.- Select Data Reader from the drop-down menu to grant
read
privileges on objects in the catalog. - Select Data Editor from the drop-down menu to grant
read
andmodify
privileges on objects in the catalog. - Manually select the privileges to grant.
- Select Data Reader from the drop-down menu to grant
- Click Grant.
-
Click Next.
-
On the Metadata page, specify tags key-value pairs. For more information, see Apply tags to Unity Catalog securable objects.
-
(Optional) Add a comment.
-
Click Save.
Run the following command in a notebook or the Databricks SQL query editor.
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user '<user>',
password '<password>'
);
We recommend that you use Databricks secrets instead of plaintext strings for sensitive values like credentials. For example:
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>')
)
For information about setting up secrets, see Secret management.
Crie um catálogo estrangeiro
Se o senhor usar a interface do usuário para criar uma conexão com a fonte de dados, a criação do catálogo externo estará incluída e o senhor poderá ignorar essa etapa.
Um catálogo externo espelha um banco de dados em um sistema de dados externo para você consultar e gerenciar o acesso aos dados nesse banco de dados com Databricks e Unity Catalog. Para criar um catálogo externo, utiliza-se uma conexão com a fonte de dados que já foi definida.
Para criar um catálogo externo, o senhor pode usar o Catalog Explorer ou o comando CREATE FOREIGN CATALOG
SQL em um Notebook Databricks ou o editor de consultas SQL. O senhor também pode usar a API REST da Databricks ou a CLI da Databricks para criar um catálogo. Veja POST /api/2.1/unity-catalog/catalogs e Unity Catalog comando.
Permissões necessárias: permissão CREATE CATALOG
na metastore e propriedade da conexão ou o privilégio CREATE FOREIGN CATALOG
na conexão.
- Catalog Explorer
- SQL
-
In your Databricks workspace, click
Catalog to open Catalog Explorer.
-
At the top of the Catalog pane, click the
Add icon and select Add a catalog from the menu.
Alternatively, from the Quick access page, click the Catalogs button, and then click the Create catalog button.
-
Follow the instructions for creating foreign catalogs in Create catalogs.
Run the following SQL command in a notebook or SQL query editor. Items in brackets are optional. Replace the placeholder values:
<catalog-name>
: Name for the catalog in Databricks.<connection-name>
: The connection object that specifies the data source, path, and access credentials.<database-name>
: Name of the database you want to mirror as a catalog in 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
O campo database
do catálogo externo mapeia para um identificador de banco de dados do Snowflake. Se o identificador do banco de dados do Snowflake não diferenciar maiúsculas de minúsculas, a caixa que o senhor usa no catálogo externo <database-name>
será preservada. No entanto, se o identificador do banco de dados do Snowflake diferenciar maiúsculas de minúsculas, o senhor deverá colocar o catálogo externo <database-name>
entre aspas duplas para preservar as maiúsculas e minúsculas.
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 as aspas duplas não são escapadas corretamente.
Para obter mais informações, consulte os requisitos do identificador na documentação do site Snowflake.
Pushdowns suportados
Os seguintes pushdowns são suportados:
- Filtros
- Projeções
- Limite
- unir-se
- Agregados (média, Corr, população de CoV, amostra de COV, contagem, máximo, mínimo, stdDevPop, stdDevSamp, Sum, VariancePop, VarianceAMP)
- Funções (funções de cadeias de caracteres, funções matemáticas, funções de dados, tempo e registro de data e hora e outras funções diversas, como Alias, Cast, SortOrder)
- Funções do Windows (DenseRank, Rank, RowNumber)
- Classificação
Mapeamentos de tipos de dados
Quando o senhor lê do Snowflake para o Spark, os tipos de dados são mapeados da seguinte forma:
Snowflake tipo | Spark tipo |
---|---|
decimal, número, numérico | Tipo decimal |
bigint, byteint, int, inteiro, smallint, tinyint | Tipo de número inteiro |
flutuar, flutuar 4, flutuar 8 | Tipo de flutuação |
dupla, dupla precisão, real | Tipo duplo |
char, character, strings, text, time, varchar | Tipo de string |
binário | Tipo binário |
boolean | Tipo booleano |
Data | Tipo de data |
data e hora, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz | timestampType |
Limitações do OAuth
A seguir, as limitações de suporte do OAuth:
- O endpoint do Snowflake OAuth deve ser acessível a partir dos IPs do plano de controle do Databricks. Veja os endereços IP e domínios para Databricks serviço e ativo. O Snowflake oferece suporte à 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 possibilita a conectividade direta do plano de controle do Databricks com o endpoint OAuth para autorização.
- Não há suporte para as opções de configuração Use Proxy , Proxy host , Proxy port e Snowflake role. Especifique a função do Snowflake como parte do escopo do OAuth.
PEM privado key limitações
A seguir, as limitações de suporte do PEM private key:
-
Snowflake JDBC O driver não oferece suporte à autenticação com chave privada criptografada. Para evitar erros, gere um key com a opção
-nocrypt
adicionada, da seguinte forma:openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Recurso adicional
Consulte os artigos a seguir na documentação do Snowflake: