Integrer OneLake med Azure Databricks

Denne artikkelen viser hvordan du får tilgang til OneLake-data fra Azure Databricks. Begge tilnærmingene bruker autentisering for tjenesteprinsipper og OneLake ABFS-endepunktet. Velg seksjonen som matcher din Databricks-beregningstype:

  • Standard eller jobbklynge: Bruk Spark ABFS-driveren med OAuth-konfigurasjon for å lese og skrive data direkte gjennom Spark DataFrames.
  • Serverløs beregning: Serverløse kjøretider lar deg ikke sette egendefinerte Spark-konfigurasjonsegenskaper. Bruk i stedet Microsoft Authentication Library (MSAL) og biblioteket Python deltalake for å autentisere og lese eller skrive Delta-tabeller.

For relaterte Databricks-integrasjonsscenarier, se følgende ressurser:

Scenario Dokumentasjon
Søk i OneLake-data fra Unity Catalog uten å kopiere dem Aktiver OneLake-katalogføderasjonen
Få tilgang til Databricks Unity-katalogdata fra Fabric Speiling av Azure Databricks Unity-katalog

Forutsetning

Før du kobler deg til, sørg for at du har:

  • Et stoffarbeidsområde og innsjøhus.
  • Et premium Azure Databricks-arbeidsområde.
  • En tjenesteprincipal med minst tildelingen av Bidragsyter-arbeidsområdet .
  • Databricks secrets eller Azure Key Vault (AKV) for å lagre og hente hemmeligheter. Eksemplene i denne artikkelen bruker Databricks hemmeligheter.

Koble til OneLake med en standard klynge

Bruk riktig OneLake ABFS-stiformat

Bruk ett av 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 bruke ID-er eller navn. Hvis du bruker navn, unngå spesialtegn og mellomrom i arbeidsplass- og innsjøhusnavn.

Bruk autentisering av tjenesteprinsipp

Bruk dette alternativet for automatiserte jobber og sentralisert hemmelig rotasjon.

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"
)

Koble til OneLake med serverløs databehandling

Databricks serverløse beregning lar deg kjøre arbeidsbelastninger uten å sette opp en klynge, men det tillater bare et delsett av støttede Spark-egenskaper. Du kan ikke sette fs.azure.* Spark-konfigurasjonen som brukes på standard klynger.

Note

Denne begrensningen er ikke unik for Azure Databricks. Databricks serverløse implementasjoner på Amazon Web Services (AWS) og Google Cloud har samme oppførsel.

Hvis du prøver å sette en ikke-støttet Spark-konfigurasjon i en serverløs notatbok, returnerer systemet en CONFIG_NOT_AVAILABLE feil.

Skjermbilde som viser feilmelding hvis en bruker prøver å endre Spark-konfigurasjon som ikke støttes i serverløs databehandling.

Bruk i stedet MSAL for å skaffe en OAuth-token og biblioteket Python deltalake for å lese eller skrive Delta-tabeller med det tokenet.

Sett opp en serverløs notatbok

  1. Lag en notatbok i Databricks-arbeidsområdet ditt og koble den til serverløs beregning.

    Skjermbilde som viser hvordan du kobler Databricks-notatblokken til serverløs databehandling.

  2. Importer Python-moduler. I dette eksempelet, bruk to moduler:

    • msal autentiseres med Microsofts identitetsplattform.
    • deltalake leser og skriver Delta Lake-tabeller med Python.
    from msal import ConfidentialClientApplication
    from deltalake import DeltaTable, write_deltalake
    
  3. Deklarer variabler for Microsoft Entra-leier, inkludert program-ID. Bruk leier-ID-en til leieren der Microsoft Fabric distribueres.

    # 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>")
    
  4. Deklarer variabler for Fabric-arbeidsområdet.

    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}"
    
  5. Initialiser klienten for å hente 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)}")
    
  6. Les en Delta-tabell fra OneLake.

    dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"})
    df = dt.to_pandas()
    print(df.head())
    
  7. Skriv en Delta-tabell 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"}
    )
    

Utformingshensyn:

  • Bruk ett skrivemønster per tabellsti der det er mulig. Å skrive til de samme lagringsstiene fra flere beregningsmotorer eller kjøretidsversjoner kan føre til konflikter.
  • Bruk hemmelighetshåndtering for tjenesteprincipal-legitimasjoner.
  • Bruk OneLake-snarveier når du trenger virtualisert tilgang, i stedet for å fysisk skrive data inn i et annet lakehouse-lokasjon.