Läsa data som delas med deltadelning – öppen delning (för mottagare)

Den här artikeln beskriver hur du läser data som har delats med dig med hjälp av deltadelningsprotokollet för öppen delning . I öppen delning använder du en fil med autentiseringsuppgifter som har delats med en medlem i ditt team av dataleverantören för att få säker läsåtkomst till delade data. Åtkomsten bevaras så länge autentiseringsuppgiften är giltig och providern fortsätter att dela data. Leverantörer hanterar förfallodatum och rotation av autentiseringsuppgifter. Uppdateringar till data är tillgängliga för dig nästan i realtid. Du kan läsa och göra kopior av delade data, men du kan inte ändra källdata.

Kommentar

Om data har delats med dig med Databricks-till-Databricks Delta-delning behöver du ingen autentiseringsfil för att komma åt data, och den här artikeln gäller inte för dig. Anvisningar finns i Läsa data som delas med Databricks-till-Databricks Delta-delning (för mottagare).

Avsnitten nedan beskriver hur du använder Azure Databricks, Apache Spark, Pandas och Power BI för att komma åt och läsa delade data med hjälp av autentiseringsfilen. En fullständig lista över anslutningsappar för deltadelning och information om hur du använder dem finns i deltadelningsdokumentationen för öppen källkod. Om du får problem med att komma åt delade data kontaktar du dataleverantören.

Kommentar

Partnerintegreringar tillhandahålls, om inget annat anges, av tredje part och du måste ha ett konto hos lämplig leverantör för användning av deras produkter och tjänster. Databricks gör sitt bästa för att hålla det här innehållet uppdaterat, men vi gör inga utfästelser beträffande integrationerna eller korrektheten hos innehållet på partnerintegreringssidorna. Kontakta aktuella leverantörer angående integrationerna.

Innan du börjar

En medlem i ditt team måste ladda ned autentiseringsfilen som delas av dataleverantören. Se Hämta åtkomst i den öppna delningsmodellen.

De bör använda en säker kanal för att dela filen eller filplatsen med dig.

Azure Databricks: Läsa delade data med hjälp av anslutningsappar för öppen delning

I det här avsnittet beskrivs hur du använder en öppen delningsanslutning för att komma åt delade data med hjälp av en notebook-fil på din Azure Databricks-arbetsyta. Du eller någon annan medlem i ditt team lagrar autentiseringsfilen i DBFS och använder den sedan för att autentisera till dataleverantörens Azure Databricks-konto och läsa de data som dataleverantören delade med dig.

Kommentar

Om dataprovidern använder Databricks-till-Databricks-delning och inte delade en autentiseringsfil med dig, måste du komma åt data med hjälp av Unity Catalog. Anvisningar finns i Läsa data som delas med Databricks-till-Databricks Delta-delning (för mottagare).

I det här exemplet skapar du en notebook-fil med flera celler som du kan köra oberoende av varandra. Du kan i stället lägga till notebook-kommandon i samma cell och köra dem i följd.

Steg 1: Lagra autentiseringsfilen i DBFS (Python-instruktioner)

I det här steget använder du en Python-anteckningsbok i Azure Databricks för att lagra autentiseringsfilen så att användarna i ditt team kan komma åt delade data.

Gå vidare till nästa steg om du eller någon i ditt team redan har lagrat autentiseringsfilen i DBFS.

  1. Öppna autentiseringsfilen i en textredigerare.

  2. På din Azure Databricks-arbetsyta klickar du på Ny > anteckningsbok.

    • Ange ett namn.
    • Ange standardspråket för notebook-filen till Python.
    • Välj ett kluster som ska kopplas till notebook-filen.
    • Klicka på Skapa.

    Anteckningsboken öppnas i notebook-redigeraren.

  3. Om du vill använda Python eller Pandas för att komma åt delade data installerar du Python-anslutningsappen för deltadelning. I notebook-redigeraren klistrar du in följande kommando:

    %sh pip install delta-sharing
    
  4. Kör cellen.

    Python-biblioteket delta-sharing installeras i klustret om det inte redan är installerat.

  5. I en ny cell klistrar du in följande kommando, som laddar upp innehållet i autentiseringsfilen till en mapp i DBFS. Ersätt variablerna på följande sätt:

    • <dbfs-path>: sökvägen till mappen där du vill spara filen med autentiseringsuppgifter

    • <credential-file-contents>: innehållet i autentiseringsfilen. Det här är inte en sökväg till filen, utan det kopierade innehållet i filen.

      Autentiseringsfilen innehåller JSON som definierar tre fält: shareCredentialsVersion, endpointoch bearerToken.

      %scala
      dbutils.fs.put("<dbfs-path>/config.share","""
      <credential-file-contents>
      """)
      
  6. Kör cellen.

    När autentiseringsfilen har laddats upp kan du ta bort den här cellen. Alla arbetsyteanvändare kan läsa autentiseringsfilen från DBFS och autentiseringsfilen är tillgänglig i DBFS på alla kluster och SQL-lager på din arbetsyta. Om du vill ta bort cellen klickar du på x i menyn Cellåtgärder cellåtgärder längst till höger.

Steg 2: Använd en notebook-fil för att lista och läsa delade tabeller

I det här steget listar du tabellerna i resursen, eller en uppsättning delade tabeller och partitioner, och du kör frågor mot en tabell.

  1. Använd Python och visa en lista över tabellerna i resursen.

    I en ny cell klistrar du in följande kommando. Ersätt <dbfs-path> med sökvägen som skapades i steg 1: Lagra autentiseringsfilen i DBFS (Python-instruktioner).

    När koden körs läser Python autentiseringsfilen från DBFS i klustret. Komma åt data som lagras i DBFS på sökvägen /dbfs/.

    import delta_sharing
    
    client = delta_sharing.SharingClient(f"/dbfs/<dbfs-path>/config.share")
    
    client.list_all_tables()
    
  2. Kör cellen.

    Resultatet är en matris med tabeller, tillsammans med metadata för varje tabell. Följande utdata visar två tabeller:

    Out[10]: [Table(name='example_table', share='example_share_0', schema='default'), Table(name='other_example_table', share='example_share_0', schema='default')]
    

    Om utdata är tomma eller inte innehåller de tabeller du förväntar dig kontaktar du dataprovidern.

  3. Fråga en delad tabell.

    • Använda Scala:

      I en ny cell klistrar du in följande kommando. När koden körs läss autentiseringsfilen från DBFS via JVM.

      Ersätt variablerna på följande sätt:

      • <profile-path>: DBFS-sökvägen till autentiseringsfilen. Exempel: /<dbfs-path>/config.share
      • <share-name>: värdet share= för för tabellen.
      • <schema-name>: värdet schema= för för tabellen.
      • <table-name>: värdet name= för för tabellen.
      %scala
          spark.read.format("deltaSharing")
          .load("<profile-path>#<share-name>.<schema-name>.<table-name>").limit(10);
      

      Kör cellen. Varje gång du läser in den delade tabellen ser du nya data från källan.

    • Använda SQL:

      Om du vill köra frågor mot data med HJÄLP av SQL skapar du en lokal tabell på arbetsytan från den delade tabellen och frågar sedan den lokala tabellen. Delade data lagras inte eller cachelagras inte i den lokala tabellen. Varje gång du frågar den lokala tabellen visas det aktuella tillståndet för delade data.

      I en ny cell klistrar du in följande kommando.

      Ersätt variablerna på följande sätt:

      • <local-table-name>: namnet på den lokala tabellen.
      • <profile-path>: platsen för autentiseringsfilen.
      • <share-name>: värdet share= för för tabellen.
      • <schema-name>: värdet schema= för för tabellen.
      • <table-name>: värdet name= för för tabellen.
      %sql
      DROP TABLE IF EXISTS table_name;
      
      CREATE TABLE <local-table-name> USING deltaSharing LOCATION "<profile-path>#<share-name>.<schema-name>.<table-name>";
      
      SELECT * FROM <local-table-name> LIMIT 10;
      

      När du kör kommandot efterfrågas delade data direkt. Som ett test efterfrågas tabellen och de första 10 resultaten returneras.

    Om utdata är tomma eller inte innehåller de data du förväntar dig kontaktar du dataleverantören.

Apache Spark: Läsa delade data

Följ dessa steg för att komma åt delade data med Spark 3.x eller senare.

Dessa instruktioner förutsätter att du har åtkomst till autentiseringsfilen som delades av dataprovidern. Se Hämta åtkomst i den öppna delningsmodellen.

Installera Delta Sharing Python- och Spark-anslutningsapparna

Om du vill komma åt metadata som är relaterade till delade data, till exempel listan över tabeller som delas med dig, gör du följande. I det här exemplet används Python.

  1. Installera Python-anslutningsappen för deltadelning:

    pip install delta-sharing
    
  2. Installera Apache Spark-anslutningsappen.

Visa en lista över delade tabeller med Spark

Visa en lista över tabellerna i resursen. I följande exempel ersätter du <profile-path> med platsen för autentiseringsfilen.

import delta_sharing

client = delta_sharing.SharingClient(f"<profile-path>/config.share")

client.list_all_tables()

Resultatet är en matris med tabeller, tillsammans med metadata för varje tabell. Följande utdata visar två tabeller:

Out[10]: [Table(name='example_table', share='example_share_0', schema='default'), Table(name='other_example_table', share='example_share_0', schema='default')]

Om utdata är tomma eller inte innehåller de tabeller du förväntar dig kontaktar du dataprovidern.

Få åtkomst till delade data med Spark

Kör följande och ersätt dessa variabler:

  • <profile-path>: platsen för autentiseringsfilen.
  • <share-name>: värdet share= för för tabellen.
  • <schema-name>: värdet schema= för för tabellen.
  • <table-name>: värdet name= för för tabellen.
  • <version-as-of>:Valfri. Tabellens version för att läsa in data. Fungerar bara om dataprovidern delar tabellens historik. Kräver delta-sharing-spark 0.5.0 eller senare.
  • <timestamp-as-of>:Valfri. Läs in data vid versionen före eller vid den angivna tidsstämpeln. Fungerar bara om dataprovidern delar tabellens historik. Kräver delta-sharing-spark 0.6.0 eller senare.

Python

delta_sharing.load_as_spark(f"<profile-path>#<share-name>.<schema-name>.<table-name>", version=<version-as-of>)

spark.read.format("deltaSharing")\
.option("versionAsOf", <version-as-of>)\
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")\
.limit(10))

delta_sharing.load_as_spark(f"<profile-path>#<share-name>.<schema-name>.<table-name>", timestamp=<timestamp-as-of>)

spark.read.format("deltaSharing")\
.option("timestampAsOf", <timestamp-as-of>)\
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")\
.limit(10))

Scala

Kör följande och ersätt dessa variabler:

  • <profile-path>: platsen för autentiseringsfilen.
  • <share-name>: värdet share= för för tabellen.
  • <schema-name>: värdet schema= för för tabellen.
  • <table-name>: värdet name= för för tabellen.
  • <version-as-of>:Valfri. Tabellens version för att läsa in data. Fungerar bara om dataprovidern delar tabellens historik. Kräver delta-sharing-spark 0.5.0 eller senare.
  • <timestamp-as-of>:Valfri. Läs in data vid versionen före eller vid den angivna tidsstämpeln. Fungerar bara om dataprovidern delar tabellens historik. Kräver delta-sharing-spark 0.6.0 eller senare.
spark.read.format("deltaSharing")
.option("versionAsOf", <version-as-of>)
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")
.limit(10)

spark.read.format("deltaSharing")
.option("timestampAsOf", <version-as-of>)
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")
.limit(10)

Få åtkomst till dataflöde för delad ändring med Spark

Om tabellhistoriken har delats med dig och ändringsdataflödet (CDF) är aktiverat i källtabellen kan du komma åt ändringsdataflödet genom att köra följande och ersätta dessa variabler. Kräver delta-sharing-spark 0.5.0 eller senare.

En och endast en startparameter måste anges.

  • <profile-path>: platsen för autentiseringsfilen.
  • <share-name>: värdet share= för för tabellen.
  • <schema-name>: värdet schema= för för tabellen.
  • <table-name>: värdet name= för för tabellen.
  • <starting-version>:Valfri. Startversionen av frågan, inklusive. Ange som lång.
  • <ending-version>:Valfri. Slutversionen av frågan, inklusive. Om slutversionen inte tillhandahålls använder API:et den senaste tabellversionen.
  • <starting-timestamp>:Valfri. Starttidsstämpeln för frågan konverteras till en version som skapats större eller lika med den här tidsstämpeln. Ange som en sträng i formatet yyyy-mm-dd hh:mm:ss[.fffffffff].
  • <ending-timestamp>:Valfri. Den avslutande tidsstämpeln för frågan konverteras till en version som skapades tidigare eller lika med den här tidsstämpeln. Ange som en sträng i formatet yyyy-mm-dd hh:mm:ss[.fffffffff]

Python

delta_sharing.load_table_changes_as_spark(f"<profile-path>#<share-name>.<schema-name>.<table-name>",
  starting_version=<starting-version>,
  ending_version=<ending-version>)

delta_sharing.load_table_changes_as_spark(f"<profile-path>#<share-name>.<schema-name>.<table-name>",
  starting_timestamp=<starting-timestamp>,
  ending_timestamp=<ending-timestamp>)

spark.read.format("deltaSharing").option("readChangeFeed", "true")\
.option("statingVersion", <starting-version>)\
.option("endingVersion", <ending-version>)\
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")

spark.read.format("deltaSharing").option("readChangeFeed", "true")\
.option("startingTimestamp", <starting-timestamp>)\
.option("endingTimestamp", <ending-timestamp>)\
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")

Scala

spark.read.format("deltaSharing").option("readChangeFeed", "true")
.option("statingVersion", <starting-version>)
.option("endingVersion", <ending-version>)
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")

spark.read.format("deltaSharing").option("readChangeFeed", "true")
.option("startingTimestamp", <starting-timestamp>)
.option("endingTimestamp", <ending-timestamp>)
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")

Om utdata är tomma eller inte innehåller de data du förväntar dig kontaktar du dataleverantören.

Få åtkomst till en delad tabell med Spark Structured Streaming

Om tabellhistoriken delas med dig kan du strömma läsning av delade data. Kräver delta-sharing-spark 0.6.0 eller senare.

Alternativ som stöds:

  • ignoreDeletes: Ignorera transaktioner som tar bort data.
  • ignoreChanges: Bearbeta uppdateringar igen om filer skrevs om i källtabellen på grund av en dataförändringsåtgärd som UPDATE, MERGE INTO, DELETE (inom partitioner) eller OVERWRITE. Oförändrade rader kan fortfarande genereras. Därför bör nedströmskonsumenterna kunna hantera dubbletter. Borttagningar sprids inte nedströms. ignoreChanges undersummor ignoreDeletes. Om du använder ignoreChangesstörs därför inte dataströmmen av borttagningar eller uppdateringar av källtabellen.
  • startingVersion: Den delade tabellversion som ska startas från. Alla tabelländringar från och med den här versionen (inklusive) kommer att läsas av strömningskällan.
  • startingTimestamp: Tidsstämpeln som ska startas från. Alla tabelländringar som har checkats in vid eller efter tidsstämpeln (inklusive) kommer att läsas av strömningskällan. Exempel: "2023-01-01 00:00:00.0".
  • maxFilesPerTrigger: Antalet nya filer som ska beaktas i varje mikrobatch.
  • maxBytesPerTrigger: Mängden data som bearbetas i varje mikrobatch. Det här alternativet anger ett "mjukt maxvärde", vilket innebär att en batch bearbetar ungefär den här mängden data och kan bearbeta mer än gränsen för att få strömningsfrågan att gå framåt i de fall då den minsta indataenheten är större än den här gränsen.
  • readChangeFeed: Stream läser ändringsdataflödet för den delade tabellen.

Alternativ som inte stöds:

  • Trigger.availableNow

Exempel på strukturerade strömningsfrågor

Scala
spark.readStream.format("deltaSharing")
.option("startingVersion", 0)
.option("ignoreChanges", true)
.option("maxFilesPerTrigger", 10)
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")
Python
spark.readStream.format("deltaSharing")\
.option("startingVersion", 0)\
.option("ignoreDeletes", true)\
.option("maxBytesPerTrigger", 10000)\
.load("<profile-path>#<share-name>.<schema-name>.<table-name>")

Se även Direktuppspelning på Azure Databricks.

Läs tabeller med borttagningsvektorer eller kolumnmappning aktiverat

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

Borttagningsvektorer är en funktion för lagringsoptimering som leverantören kan aktivera i delade Delta-tabeller. Se Vad är borttagningsvektorer?.

Azure Databricks stöder även kolumnmappning för Delta-tabeller. Se Byt namn på och släpp kolumner med Delta Lake-kolumnmappning.

Om providern har delat en tabell med borttagningsvektorer eller kolumnmappning aktiverad kan du läsa tabellen med hjälp av beräkning som kör delta-sharing-spark 3.1 eller senare. Om du använder Databricks-kluster kan du utföra batchläsningar med hjälp av ett kluster som kör Databricks Runtime 14.1 eller senare. CDF- och strömningsfrågor kräver Databricks Runtime 14.2 eller senare.

Du kan utföra batchfrågor som de är eftersom de automatiskt kan matchas responseFormat baserat på tabellfunktionerna i den delade tabellen.

Om du vill läsa en cdf (change data feed) eller utföra strömmande frågor på delade tabeller med borttagningsvektorer eller kolumnmappning aktiverat måste du ange det ytterligare alternativet responseFormat=delta.

I följande exempel visas frågor om batch, CDF och strömning:

import org.apache.spark.sql.SparkSession

val spark = SparkSession
        .builder()
        .appName("...")
        .master("...")
        .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
        .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
        .getOrCreate()

val tablePath = "<profile-file-path>#<share-name>.<schema-name>.<table-name>"

// Batch query
spark.read.format("deltaSharing").load(tablePath)

// CDF query
spark.read.format("deltaSharing")
  .option("readChangeFeed", "true")
  .option("responseFormat", "delta")
  .option("startingVersion", 1)
  .load(tablePath)

// Streaming query
spark.readStream.format("deltaSharing").option("responseFormat", "delta").load(tablePath)

Pandas: Läsa delade data

Följ de här stegen för att komma åt delade data i Pandas 0.25.3 eller senare.

Dessa instruktioner förutsätter att du har åtkomst till autentiseringsfilen som delades av dataprovidern. Se Hämta åtkomst i den öppna delningsmodellen.

Installera Delta Sharing Python-anslutningsappen

Om du vill komma åt metadata som är relaterade till delade data, till exempel listan över tabeller som delas med dig, måste du installera Python-anslutningsappen för deltadelning.

pip install delta-sharing

Visa en lista över delade tabeller med pandas

Om du vill visa en lista över tabellerna i resursen kör du följande och ersätter <profile-path>/config.share med platsen för autentiseringsfilen.

import delta_sharing

client = delta_sharing.SharingClient(f"<profile-path>/config.share")

client.list_all_tables()

Om utdata är tomma eller inte innehåller de tabeller du förväntar dig kontaktar du dataprovidern.

Få åtkomst till delade data med pandas

Om du vill komma åt delade data i Pandas med Python kör du följande och ersätter variablerna på följande sätt:

  • <profile-path>: platsen för autentiseringsfilen.
  • <share-name>: värdet share= för för tabellen.
  • <schema-name>: värdet schema= för för tabellen.
  • <table-name>: värdet name= för för tabellen.
import delta_sharing
delta_sharing.load_as_pandas(f"<profile-path>#<share-name>.<schema-name>.<table-name>")

Få åtkomst till ett dataflöde för delad ändring med pandas

Om du vill komma åt ändringsdataflödet för en delad tabell i Pandas med python kör du följande genom att ersätta variablerna på följande sätt. En ändringsdatafeed kanske inte är tillgänglig, beroende på om dataleverantören delade ändringsdataflödet för tabellen eller inte.

  • <starting-version>:Valfri. Startversionen av frågan, inklusive.
  • <ending-version>:Valfri. Slutversionen av frågan, inklusive.
  • <starting-timestamp>:Valfri. Starttidsstämpeln för frågan. Detta konverteras till en version som skapats större eller lika med den här tidsstämpeln.
  • <ending-timestamp>:Valfri. Den avslutande tidsstämpeln för frågan. Detta konverteras till en version som skapats tidigare eller lika med den här tidsstämpeln.
import delta_sharing
delta_sharing.load_table_changes_as_pandas(
  f"<profile-path>#<share-name>.<schema-name>.<table-name>",
  starting_version=<starting-version>,
  ending_version=<starting-version>)

delta_sharing.load_table_changes_as_pandas(
  f"<profile-path>#<share-name>.<schema-name>.<table-name>",
  starting_timestamp=<starting-timestamp>,
  ending_timestamp=<ending-timestamp>)

Om utdata är tomma eller inte innehåller de data du förväntar dig kontaktar du dataleverantören.

Power BI: Läsa delade data

Med Power BI Delta Sharing-anslutningsappen kan du identifiera, analysera och visualisera datauppsättningar som delas med dig via öppna protokollet Deltadelning.

Krav

Anslut till Databricks

Gör följande för att ansluta till Azure Databricks med deltadelningsanslutningsappen:

  1. Öppna den delade autentiseringsfilen med en textredigerare för att hämta slutpunkts-URL:en och token.
  2. Öppna Power BI Desktop.
  3. På menyn Hämta data söker du efter Deltadelning.
  4. Välj anslutningsappen och klicka på Anslut.
  5. Ange slutpunkts-URL:en som du kopierade från filen med autentiseringsuppgifter till fältet Delta Sharing Server-URL .
  6. Du kan också ange en radgräns för det maximala antalet rader som du kan ladda ned på fliken Avancerade alternativ. Detta är inställt på 1 miljon rader som standard.
  7. Klicka på OK.
  8. För autentisering kopierar du den token som du hämtade från autentiseringsuppgifterna till Ägartoken.
  9. Klicka på Anslut.

Begränsningar i Anslutningsappen för Delning av Power BI-delta

Power BI Delta Sharing-Anslut eller har följande begränsningar:

  • De data som anslutningsappen läser in måste passa in i datorns minne. För att säkerställa detta begränsar anslutningsappen antalet importerade rader till den radgräns som du anger under fliken Avancerade alternativ i Power BI Desktop.

Begära en ny autentiseringsuppgift

Om url:en för aktivering av autentiseringsuppgifter eller nedladdade autentiseringsuppgifter går förlorad, skadas eller komprometteras, eller om autentiseringsuppgifterna upphör att gälla utan att leverantören skickar en ny, kontaktar du leverantören för att begära en ny autentiseringsuppgift.