Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du kommer åt OneLake-data från Azure Databricks. Båda metoderna använder autentisering genom tjänstens huvudkonto och OneLake ABFS-slutpunkten. Välj det avsnitt som matchar databricks-beräkningstypen:
- Standard- eller jobbkluster: Använd Spark ABFS-drivrutinen med OAuth-konfigurationen för att läsa och skriva data direkt via Spark DataFrames.
-
Serverlös beräkning: Med serverlösa körningar kan du inte ange anpassade Spark-konfigurationsegenskaper. Använd i stället Microsofts autentiseringsbibliotek (MSAL) och biblioteket Python
deltalakeför att autentisera och läsa eller skriva Delta-tabeller.
Relaterade Databricks-integreringsscenarier finns i följande resurser:
| Scenario | Documentation |
|---|---|
| Fråga OneLake-data från Unity Catalog utan att kopiera dem | Aktivera OneLake-katalogfederation |
| Få åtkomst till Databricks Unity-katalogdata från Fabric | Spegling av Azure Databricks Unity-katalog |
Förutsättningar
Innan du ansluter, se till att du har:
- En Fabric-arbetsyta och lakehouse.
- En premiumarbetsyta för Azure Databricks.
- Ett tjänsthuvudnamn med minst rolltilldelningen Deltagare på arbetsytan.
- Databricks-hemligheter eller Azure Key Vault (AKV) för att lagra och hämta hemligheter. Exemplen i den här artikeln använder Databricks-hemligheter.
Ansluta till OneLake med ett standardkluster
Använd rätt OneLake ABFS-sökvägsformat
Använd något av följande URI-format:
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>
Du kan använda ID:t eller namnen. Om du använder namn bör du undvika specialtecken och blanksteg i arbetsytornas och lakehouse namn.
Använda autentisering med tjänsthuvudnamn
Använd det här alternativet för automatiserade jobb och centraliserad hemlig rotation.
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"
)
Ansluta till OneLake med serverlös beräkning
Med databricks serverlös beräkning kan du köra arbetsbelastningar utan att etablera ett kluster, men det tillåter bara en delmängd av Spark-egenskaper som stöds. Du kan inte ange den fs.azure.* Spark-konfiguration som används i standardkluster.
Anmärkning
Den här begränsningen är inte unik för Azure Databricks. Databricks serverlösa implementeringar på Amazon Web Services (AWS) och Google Cloud har samma beteende.
Om du försöker ange en Spark-konfiguration som inte stöds i en serverlös notebook-fil returnerar systemet ett CONFIG_NOT_AVAILABLE fel.
Använd i stället MSAL för att hämta en OAuth-token och biblioteket Python deltalake för att läsa eller skriva Delta-tabeller med den token.
Konfigurera en serverlös anteckningsbok
Skapa en notebook-fil på databricks-arbetsytan och koppla den till serverlös beräkning.
Importera Python-moduler. I det här exemplet använder du två moduler:
- msal autentiserar med Microsofts identitetsplattform.
- deltalake läser och skriver Delta Lake-tabeller med Python.
from msal import ConfidentialClientApplication from deltalake import DeltaTable, write_deltalakeDeklarera variabler för Microsoft Entra-klientorganisationen, inklusive program-ID. Använd klientorganisations-ID:t för klientorganisationen där Microsoft Fabric distribueras.
# 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>")Deklarera Fabric-arbeitsytevariabler.
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}"Initiera klienten för att få 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)}")Läs en Delta-tabell från OneLake.
dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"}) df = dt.to_pandas() print(df.head())Skriv en Delta-tabell till 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"} )
Designöverväganden
- Använd ett skrivmönster per tabellsökväg där det är möjligt. Att skriva till samma lagringssökvägar från flera beräkningsmotorer eller körningsversioner kan orsaka konflikter.
- Använd hantering av hemligheter för autentiseringsuppgifter för tjänstens huvudnamn.
- Använd OneLake-genvägar när du behöver virtualiserad åtkomst i stället för att fysiskt skriva data till en annan lakehouse-plats.