Pular para o conteúdo principal

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égio CREATE 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.

nota

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 definir OAUTH_REDIRECT_URI como https://<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.

important

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.

nota

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.

  1. In your Databricks workspace, click Catalog icon Catalog.

  2. At the top of the Catalog pane, click the Add or plus icon 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.

  3. On the Connection basics page of the Set up connection wizard, enter a user-friendly Connection name.

  4. Select a Connection type of Snowflake.

  5. For Auth type, select Username and password (basic authentication), OAuth access token, PEM Private Key, or OAuth from the drop-down menu.

  6. (Optional) Add a comment.

  7. Click Next.

  8. 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.

  9. Click Create connection.

  10. (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.
  11. Click Next.

  12. 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.

  13. (Optional) Click Test connection to confirm that it works.

  14. Click Create catalog.

  15. 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.

  16. 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.

  17. Grant Privileges on the catalog. Click Grant:

    1. 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.
    2. 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 and modify privileges on objects in the catalog.
      • Manually select the privileges to grant.
    3. Click Grant.
  18. Click Next.

  19. On the Metadata page, specify tags key-value pairs. For more information, see Apply tags to Unity Catalog securable objects.

  20. (Optional) Add a comment.

  21. Click Save.

Crie um catálogo estrangeiro

nota

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.

  1. In your Databricks workspace, click Catalog icon Catalog to open Catalog Explorer.

  2. At the top of the Catalog pane, click the Add or plus icon 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.

  3. Follow the instructions for creating foreign catalogs in Create catalogs.

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 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 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: