Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Denne artikel viser, hvordan man får adgang til OneLake-data fra Azure Databricks. Begge tilgange bruger service principal-autentificering og OneLake ABFS-endpointet. Vælg den sektion, der matcher din Databricks-beregningstype:
- Standard eller jobklynge: Brug Spark ABFS-driveren med OAuth-konfiguration til at læse og skrive data direkte gennem Spark DataFrames.
-
Serverløs compute: Serverløse runtime-systemer tillader ikke, at du sætter brugerdefinerede Spark-konfigurationsegenskaber. Brug i stedet Microsoft Authentication Library (MSAL) og biblioteket Python
deltalaketil at autentificere og læse eller skrive Delta-tabeller.
For relaterede Databricks-integrationsscenarier, se følgende ressourcer:
| Scenarie | Dokumentation |
|---|---|
| Forespørg OneLake-data fra Unity Catalog uden at kopiere dem | Aktiver OneLake katalogføderation |
| Få adgang til Databricks Unity Catalog-data fra Fabric | Spejling af Azure Databricks Unity-katalog |
Forudsætninger
Før du forbinder, skal du sikre dig, at du har:
- Et stofarbejdsområde og søhus.
- Et Premium Azure Databricks-arbejdsområde.
- En serviceprincipal med mindst tildelingen af bidragyder-arbejdsområdet .
- Databricks hemmeligheder eller Azure Key Vault (AKV) til at gemme og hente hemmeligheder. Eksemplerne i denne artikel bruger Databricks hemmeligheder.
Forbind til OneLake med en standardklynge
Brug det korrekte OneLake ABFS-stiformat
Brug et af følgende URI-formater:
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 bruge ID'er eller navne. Hvis du bruger navne, så undgå specialtegn og mellemrum i arbejdsområde- og søhusnavne.
Brug service principal-autentificering
Brug denne mulighed til automatiserede jobs og centraliseret hemmelig 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"
)
Forbind til OneLake med serverløs compute
Databricks serverløse compute lader dig køre arbejdsbelastninger uden at provisionere en klynge, men den tillader kun et delmængde af understøttede Spark-egenskaber. Du kan ikke sætte Spark-konfigurationen, der fs.azure.* bruges på standardklynger.
Notat
Denne begrænsning er ikke unik for Azure Databricks. Databricks serverløse implementeringer på Amazon Web Services (AWS) og Google Cloud har samme adfærd.
Hvis du forsøger at sætte en ikke-understøttet Spark-konfiguration i en serverløs notebook, returnerer systemet en CONFIG_NOT_AVAILABLE fejl.
Brug i stedet MSAL til at erhverve en OAuth-token og biblioteket Python deltalake til at læse eller skrive Delta-tabeller med det token.
Opsæt en serverløs notebook
Opret en notesbog i dit Databricks-arbejdsområde og tilknyt den til serverløs compute.
Importer Python-moduler. I dette eksempel bruges to moduler:
- msal autentificerer med Microsoft-identitetsplatform.
- deltalake læser og skriver Delta Lake-tabeller med Python.
from msal import ConfidentialClientApplication from deltalake import DeltaTable, write_deltalakeErklære variabler for Microsoft Entra-lejer, herunder program-id. Brug lejer-id'et for den lejer, hvor Microsoft Fabric er installeret.
# 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>")Deklarer variabler for arbejdsområde i struktur.
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}"Initialiser klienten for at erhverve 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-tabel fra 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-tabel til 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"} )
Designovervejelser
- Brug ét writer-mønster pr. tabelsti, hvor det er muligt. At skrive til de samme lagerstier fra flere beregningsmotorer eller runtime-versioner kan forårsage konflikter.
- Brug secrets management til service principal-legitimationer.
- Brug OneLake-genveje , når du har brug for virtualiseret adgang, i stedet for fysisk at skrive data ind i en anden lakehouse-lokation.