Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u toegang hebt tot OneLake-gegevens uit Azure Databricks. Beide benaderingen maken gebruik van service-principalverificatie en het OneLake ABFS-eindpunt. Kies de sectie die overeenkomt met uw Databricks-rekentype:
- Standaardcluster of taakcluster: gebruik het Spark ABFS-stuurprogramma met OAuth-configuratie om gegevens rechtstreeks te lezen en te schrijven via Spark DataFrames.
-
Serverloze rekenkracht: met serverloze runtimes kunt u geen aangepaste Spark-configuratie-eigenschappen instellen. Gebruik in plaats daarvan de Microsoft Authentication Library (MSAL) en de bibliotheek Python
deltalakeom Delta-tabellen te verifiëren en lezen of schrijven.
Zie de volgende resources voor gerelateerde Databricks-integratiescenario's:
| Scenario | Documentatie |
|---|---|
| Een query uitvoeren op OneLake-gegevens uit Unity Catalog zonder deze te kopiëren | Federatie van OneLake-catalogus inschakelen |
| Databricks Unity Catalog-gegevens openen vanuit Fabric | Spiegelen van de Azure Databricks Unity Catalog |
Vereiste voorwaarden
Voordat u verbinding maakt, moet u ervoor zorgen dat u het volgende hebt:
- Een Fabric-werkruimte en Lakehouse.
- Een premium Azure Databricks-werkruimte.
- Een service-principal met ten minste de roltoewijzing Bijdrager werkruimte.
- Databricks-geheimen of Azure Key Vault (AKV) voor het opslaan en ophalen van geheimen. In de voorbeelden in dit artikel worden Databricks-geheimen gebruikt.
Verbinding maken met OneLake met een standaardcluster
De juiste OneLake ABFS-padindeling gebruiken
Gebruik een van de volgende URI-indelingen:
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>
U kunt id's of namen gebruiken. Als u namen gebruikt, vermijdt u speciale tekens en witruimte in werkruimte- en lakehouse-namen.
Gebruik serviceprincipal-verificatie
Gebruik deze optie voor geautomatiseerde taken en gecentraliseerde geheimrotatie.
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"
)
Maak verbinding met OneLake met serverloze rekenkracht
Met serverloze compute van Databricks kunt u workloads uitvoeren zonder een cluster in te richten, maar er is alleen een subset van ondersteunde Spark-eigenschappen toegestaan. U kunt de fs.azure.* Spark-configuratie die wordt gebruikt op standaardclusters niet instellen.
Opmerking
Deze beperking is niet uniek voor Azure Databricks. Serverloze databricks-implementaties op Amazon Web Services (AWS) en Google Cloud hebben hetzelfde gedrag.
Als u probeert een niet-ondersteunde Spark-configuratie in te stellen in een serverloze notebook, retourneert het systeem een CONFIG_NOT_AVAILABLE fout.
Gebruik in plaats daarvan MSAL om een OAuth-token en de Python deltalake-bibliotheek te verkrijgen om Delta-tabellen met dat token te lezen of te schrijven.
Een serverloos notebook instellen
Maak een notebook in uw Databricks-werkruimte en koppel dit aan serverloze berekeningen.
Importeer Python modules. Gebruik in dit voorbeeld twee modules:
- msal wordt geverifieerd bij de Microsoft identity platform.
- deltalake leest en schrijft Delta Lake-tabellen met Python.
from msal import ConfidentialClientApplication from deltalake import DeltaTable, write_deltalakeDeclareer variabelen voor Microsoft Entra-tenant, inclusief toepassings-id. Gebruik de tenant-id van de tenant waar Microsoft Fabric is geïmplementeerd.
# 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>")Declareer werkruimtevariabelen voor 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}"Initialiseer de client om een token te verkrijgen.
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)}")Lees een Delta-tabel uit OneLake.
dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"}) df = dt.to_pandas() print(df.head())Schrijf een Delta-tabel naar 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"} )
Ontwerpoverwegingen
- Gebruik waar mogelijk één schrijfpatroon per tabelpad. Schrijven naar dezelfde opslagpaden vanuit meerdere rekenprogramma's of runtimeversies kan conflicten veroorzaken.
- Geheimenbeheer gebruiken voor service-principalreferenties.
- Gebruik OneLake-snelkoppelingen wanneer u gevirtualiseerde toegang nodig hebt in plaats van fysiek gegevens te schrijven naar een andere lakehouse-locatie.