Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como acessar dados OneLake de Azure Databricks. Ambas as abordagens usam a autenticação da entidade de serviço e o ponto de extremidade do OneLake ABFS. Escolha a seção que corresponde ao tipo de computação do Databricks:
- Cluster padrão ou de trabalho: use o driver do Spark ABFS com a configuração OAuth para ler e gravar dados diretamente por meio do Spark DataFrames.
-
Computação sem servidor: runtimes sem servidor não permitem que você defina propriedades de configuração personalizadas do Spark. Em vez disso, use o Biblioteca do Microsoft Authenticator (MSAL) e a biblioteca Python
deltalakepara autenticar e ler ou gravar tabelas Delta.
Para cenários de integração relacionados do Databricks, consulte os seguintes recursos:
| Scenario | Documentação |
|---|---|
| Consultar dados do OneLake do Catálogo do Unity sem copiá-los | Habilitar federação de catálogo do OneLake |
| Acessar dados do Catálogo do Databricks Unity de Fabric | Espelhamento do Unity Catalog do Azure Databricks |
Pré-requisitos
Antes de se conectar, verifique se você tem:
- Um espaço de trabalho do Fabric e um "lakehouse".
- Um espaço de trabalho premium do Azure Databricks.
- Uma entidade de serviço com pelo menos a atribuição da função de Colaborador na área de trabalho.
- Segredos do Databricks ou Azure Key Vault (AKV) para armazenar e recuperar segredos. Os exemplos neste artigo usam segredos do Databricks.
Conectar-se ao OneLake com um cluster padrão
Use o formato de caminho correto do OneLake ABFS
Use um dos seguintes formatos de URI:
abfss://<workspace_id_or_name>@onelake.dfs.fabric.microsoft.com/<lakehouse_id_or_name>.lakehouse/Files/<path>abfss://<workspace_id_or_name>@onelake.dfs.fabric.microsoft.com/<lakehouse_id_or_name>.lakehouse/Tables/<path>
Você pode usar IDs ou nomes. Se você usar nomes, evite caracteres especiais e espaços em branco nos nomes de workspaces e lakehouses.
Usar a autenticação de entidade de serviço
Use essa opção para trabalhos automatizados e rotação centralizada de senhas.
workspace_name = "<workspace_name>"
lakehouse_name = "<lakehouse_name>"
tenant_id = dbutils.secrets.get(scope="<scope-name>", key="<tenant-id-key>")
service_principal_id = dbutils.secrets.get(scope="<scope-name>", key="<client-id-key>")
service_principal_secret = dbutils.secrets.get(scope="<scope-name>", key="<client-secret-key>")
spark.conf.set("fs.azure.account.auth.type", "OAuth")
spark.conf.set(
"fs.azure.account.oauth.provider.type",
"org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
)
spark.conf.set("fs.azure.account.oauth2.client.id", service_principal_id)
spark.conf.set("fs.azure.account.oauth2.client.secret", service_principal_secret)
spark.conf.set(
"fs.azure.account.oauth2.client.endpoint",
f"https://login.microsoftonline.com/{tenant_id}/oauth2/token",
)
# Read
df = spark.read.format("parquet").load(
f"abfss://{workspace_name}@onelake.dfs.fabric.microsoft.com/{lakehouse_name}.lakehouse/Files/data"
)
df.show(10)
# Write
df.write.format("delta").mode("overwrite").save(
f"abfss://{workspace_name}@onelake.dfs.fabric.microsoft.com/{lakehouse_name}.lakehouse/Tables/dbx_delta_spn"
)
Conectar-se ao OneLake com computação sem servidor
A computação sem servidor do Databricks permite executar cargas de trabalho sem provisionar um cluster, mas permite apenas um subconjunto de propriedades do Spark com suporte. Não é possível definir a configuração do fs.azure.* Spark usada em clusters padrão.
Observação
Essa limitação não é exclusiva do Azure Databricks. As implementações sem servidor do Databricks no Amazon Web Services (AWS) e no Google Cloud têm o mesmo comportamento.
Se você tentar definir uma configuração do Spark sem suporte em um notebook sem servidor, o sistema retornará um erro CONFIG_NOT_AVAILABLE.
Em vez disso, use a MSAL para adquirir um token OAuth e a biblioteca Python deltalake para ler ou gravar tabelas Delta com esse token.
Configurar um notebook sem servidor
Crie um notebook no workspace do Databricks e anexe-o à computação sem servidor.
Importar módulos Python. Neste exemplo, use dois módulos:
- msal autentica com a plataforma de identidade da Microsoft.
- deltalake lê e grava tabelas delta lake com Python.
from msal import ConfidentialClientApplication from deltalake import DeltaTable, write_deltalakeDeclare variáveis para o locatário do Microsoft Entra, incluindo a ID do aplicativo. Use a ID do locatário em que o Microsoft Fabric está implantado.
# Fetch from Databricks secrets. tenant_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for tenant_id>") client_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for client_id>") client_secret = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for secret>")Declare variáveis de workspace do Fabric.
workspace_id = "<replace with workspace name>" lakehouse_id = "<replace with lakehouse name>" table_to_read = "<name of lakehouse table to read>" onelake_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/{table_to_read}"Inicialize o cliente para adquirir o token.
authority = f"https://login.microsoftonline.com/{tenant_id}" app = ConfidentialClientApplication( client_id, authority=authority, client_credential=client_secret ) result = app.acquire_token_for_client(scopes=["https://onelake.fabric.microsoft.com/.default"]) if "access_token" in result: print("Access token acquired.") token_val = result['access_token'] else: raise Exception(f"Failed to acquire token: {result.get('error_description', result)}")Leia uma tabela Delta do OneLake.
dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"}) df = dt.to_pandas() print(df.head())Escreva uma tabela Delta no OneLake.
target_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/<target_table_name>" write_deltalake( target_uri, df, mode="overwrite", storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"} )
Considerações de design
- Use um padrão de escrita por caminho de tabela sempre que possível. Gravar nos mesmos caminhos de armazenamento de vários mecanismos de computação ou versões de runtime pode causar conflitos.
- Utilize o gerenciamento de segredos para credenciais de principal de serviço.
- Use atalhos do OneLake caso precise de acesso virtualizado ao invés de gravar fisicamente dados em outro local do lakehouse.