Execução de consultas federadas no Salesforce Data cloud
Este artigo descreve como configurar o Lakehouse Federation para executar consultas federadas nos dados da nuvem do Salesforce Data que não são gerenciados por Databricks. Para saber mais sobre a lakehouse Federation, consulte O que é a lakehouse Federation?
Para se conectar ao banco de dados do Salesforce Data cloud usando a Federação lakehouse, o senhor deve criar o seguinte no metastore Databricks Unity Catalog :
Uma conexão com o banco de dados do Salesforce Data cloud.
Um catálogo externo que espelha o banco de dados do Salesforce Data cloud em Unity Catalog para que o senhor possa usar a sintaxe de consulta Unity Catalog e as ferramentas de governança de dados para gerenciar o acesso do usuário Databricks ao banco de dados.
Antes de começar
workspace Requisitos:
workspace habilitado para Unity Catalog.
compute Requisitos:
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 deve usar o site Databricks Runtime 15.2 ou acima e o modo de acesso de usuário compartilhado ou único.
SQL O armazém deve ser pro ou serverless e deve usar 2024.30 ou acima.
Permissões necessárias:
Para criar uma conexão, o senhor deve ser um administrador de metastore ou um usuário com o privilégio
CREATE CONNECTION
no metastore Unity Catalog anexado ao workspace.Para criar um catálogo externo, o senhor deve ter a permissão
CREATE CATALOG
no metastore e ser o proprietário da conexão ou ter o privilégioCREATE FOREIGN CATALOG
na conexão.
Requisitos adicionais de permissão são especificados em cada seção baseada em tarefa a seguir.
Criar um aplicativo conectado ao Salesforce
Os aplicativos conectados ao Salesforce permitem que um aplicativo externo se integre ao Salesforce usando APIs e protocolos padrão. Esta seção descreve como criar um aplicativo conectado usando SSO para permitir que o Databricks se autentique no Salesforce.
Observação
Para obter instruções mais detalhadas, consulte Criar um aplicativo conectado na documentação do Salesforce Data cloud.
Para criar um aplicativo conectado ao Salesforce, faça o seguinte:
No canto superior direito do Data cloud, clique em Setup.
Em Platform Tools, clique em Apps > App Manager.
Clique em New Connected App (Novo aplicativo conectado).
Digite um nome e um endereço de contato email.
Ativar as configurações do OAuth:
Digite o URL de retorno de chamada, no seguinte formato:
https://<databricks_instance_url>/login/oauth/salesforce.html
. Por exemplo:https://cust-success.cloud.databricks.com/login/oauth/salesforce.html
.(Opcional) Se o senhor planeja usar SQL para criar a conexão Databricks e o catálogo externo no próximo passo, seu Salesforce Connected App também precisa suportar o URI de redirecionamento
https://login.salesforce.com/services/oauth2/success
. Isso não é necessário se o senhor planeja usar o Catalog Explorer para criar a conexão com o Databricks e o catálogo externo. Databricks recomenda o uso do Catalog Explorer porque ele exige menos passos manuais do que outros métodos.Adicione os seguintes escopos:
Acesse todos os dados cloud API recurso(cdp_api)
Gerenciar dados do usuário via APIs (api)
Realizar consultas ANSI SQL nos dados do Data cloud (cdp_query_api)
Realizar solicitações a qualquer momento(refresh, offline_access)
Clique em Salvar.
Clique em "Continuar".
Na página de visão geral do Connected App, clique em gerenciar Consumer Details. O senhor será solicitado a se autenticar.
Após a autenticação bem-sucedida, o consumidor key e o segredo do consumidor são revelados. Salve esses valores. O senhor precisará deles quando criar uma conexão com o Databricks.
Criar uma conexão com o Databricks
Uma conexão especifica um caminho e as credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, o senhor pode usar o Catalog Explorer ou o comando CREATE CONNECTION
SQL em um Databricks Notebook ou o editor de consultas Databricks SQL.
Observação
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
.
Em seu site Databricks workspace, clique em Catalog.
No painel esquerdo, expanda o menu External Data (Dados externos ) e selecione Connections (Conexões).
Clique em Create connection (Criar conexão).
Digite um nome de conexão fácil de usar.
Selecione um tipo de conexão do Salesforce Data cloud.
Insira as seguintes propriedades de conexão para os dados do Salesforce cloud.
Tipo de autenticação:
OAuth
É sandbox
false
(OAuth) Segredo do cliente: segredo do consumidor do aplicativo conectado ao Salesforce
(OAuth) ID do cliente: Consumidor do aplicativo conectado ao Salesforce key
(OAuth) Escopo do cliente:
cdp_api api cdp_query_api refresh_token offline_access
Clique em log in com o Salesforce.
(OAuth) Será solicitado que o senhor faça login no Salesforce Data cloud usando suas credenciais SSO.
Após o login bem-sucedido, o senhor será direcionado de volta à página Databricks Create Connection. O botão log in with Salesforce foi substituído por uma mensagem
Successfully authorized
.(Opcional) Adicione um comentário.
Clique em Criar.
Databricks recomenda o uso do Catalog Explorer para criar a conexão e o catálogo externo porque ele exige menos passos manuais do que outros métodos.
Se o senhor planeja usar o SQL para criar a conexão Databricks e o catálogo externo, seu Salesforce Connected App precisa suportar o URI de redirecionamento https://login.salesforce.com/services/oauth2/success
. Isso não é necessário se o senhor usar o Catalog Explorer.
Gerar o verificador de código PKCE e códigos de desafio de código. O senhor pode fazer isso usando uma ferramenta on-line, como https://tonyxu-io.github.io/pkce-generator/ ou executando o seguinte script Python:
%python import base64 import re import os import hashlib code_verifier = base64.urlsafe_b64encode(os.urandom(40)).decode('utf-8') code_verifier = re.sub('[^a-zA-Z0-9]+', '', code_verifier) code_challenge = hashlib.sha256(code_verifier.encode('utf-8')).digest() code_challenge = base64.urlsafe_b64encode(code_challenge).decode('utf-8') code_challenge = code_challenge.replace('=', '') print(f"pkce_verifier = \"{code_verifier}\"") print(f"code_challenge = \"{code_challenge}\"")
Visite o seguinte URL e autentique-se com suas credenciais do Salesforce para obter o
authorization_code
(substitua<client_id>
e<code_challenge>
por seus parâmetros).https://login.salesforce.com/services/oauth2/authorize ?client_id=<client_id> &redirect_uri=https://login.salesforce.com/services/oauth2/success &response_type=code &code_challenge=<code_challenge>
Um código de autorização codificado por URL é visível no URL redirecionado.
Execute o seguinte em um Notebook ou no editor de consultas Databricks SQL:
CREATE CONNECTION '<Connection name>' TYPE salesforce_data_cloud OPTIONS ( client_id '<Consumer key from Salesforce Connected App>', client_secret '<Consumer secret from Salesforce Connected App>', pkce_verifier '<pkce_verifier from the last step>', authorization_code '<URL decoded `authorization_code`, should end with == instead of %3D%3D>', oauth_redirect_uri "https://login.salesforce.com/services/oauth2/success", oauth_scope "cdp_api api cdp_query_api refresh_token offline access", is_sandbox "false" );
Databricks recomenda que o senhor use Databricks segredos em vez de texto simples strings para valores confidenciais, como credenciais. Por exemplo:
CREATE CONNECTION '<Connection name>' TYPE salesforce_data_cloud OPTIONS ( client_id secret ('<Secret scope>','<Secret key client id>'), client_secret secret ('<Secret scope>','<Secret key client secret>'), pkce_verifier '<pkce_verifier from the last step>', authorization_code '<URL decoded `authorization_code`, should end with == instead of %3D%3D>', oauth_redirect_uri "https://login.salesforce.com/services/oauth2/success", oauth_scope "cdp_api api cdp_query_api refresh_token offline access", is_sandbox "false" );
Para obter informações sobre a configuração de segredos, consulte Gerenciamento de segredos.
Criar um catálogo externo
Um catálogo externo espelha um banco de dados em um sistema de dados externo para que o senhor possa consultar e gerenciar o acesso aos dados desse banco de dados usando o Databricks e o Unity Catalog. Para criar um catálogo externo, o senhor usa 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 Databricks Notebook ou o editor de consultas SQL.
Observação
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
no metastore e a propriedade da conexão ou o privilégio CREATE FOREIGN CATALOG
na conexão.
Em seu site Databricks workspace, clique em Catalog para abrir o Catalog Explorer.
No canto superior direito, clique em Create Catalog (Criar catálogo).
Insira as seguintes propriedades para o catálogo do Salesforce Data cloud.
Nome do catálogo: um nome de fácil utilização para o catálogo.
Tipo:
Foreign
.Nome da conexão: O nome da conexão na qual o catálogo será criado.
Espaço de dados: Um espaço de dados do Salesforce.
Clique em Criar.
Execute o seguinte comando SQL em um Notebook ou no editor de consultas SQL. Os itens entre parênteses são opcionais.
CREATE FOREIGN CATALOG [IF NOT EXISTS] '<catalog-name>' USING CONNECTION '<connection-name>'
OPTIONS (dataspace '<dataspace>');
Substitua os seguintes valores:
<catalog-name>
:<connection-name>
:<dataspace>
: Espaço de dados do Salesforce. Por exemplo,default
.
Flexões com apoio
Os seguintes pushdowns são suportados:
Filtros
Projeções
Limite
Agregados
deslocamento
Elenco
Contém, Começa com, Termina com
Mapeamentos de tipos de dados
Quando o senhor lê do Salesforce Data cloud para Spark, os tipos de dados são mapeados da seguinte forma:
Dados do Salesforce cloud type |
Spark tipo |
---|---|
Boolean |
BooleanType |
Data |
DateType |
Data e hora |
timestampType |
email, Phone, Text, Url |
StringType |
Número, porcentagem |
DecimalType(38, 18) |