Dela via


Arbeta med kopplingar i Azure Databricks

Databricks stöder ANSI-standardkopplingssyntax. Den här artikeln beskriver skillnader mellan kopplingar med batch- och dataströmbearbetning och innehåller några rekommendationer för att optimera kopplingsprestanda.

Kommentar

Databricks stöder också standardsyntax för uppsättningsoperatorerna UNION, INTERSECToch EXCEPT. Se Ange operatorer.

Skillnader mellan strömning och batchkopplingar

Kopplingar i Azure Databricks är antingen tillståndskänsliga eller tillståndslösa.

Alla batchkopplingar är tillståndslösa kopplingar. Resultaten bearbetas omedelbart och återspeglar data när frågan körs. Varje gång frågan körs beräknas nya resultat baserat på angivna källdata. Se Batch-kopplingar.

Kopplingar mellan två strömmande datakällor är tillståndskänsliga. I tillståndskänsliga kopplingar spårar Azure Databricks information om datakällorna och resultaten och uppdaterar resultatet iterativt. Tillståndskänsliga kopplingar kan ge kraftfulla lösningar för databehandling online, men det kan vara svårt att implementera effektivt. De har komplexa driftssemantik beroende på utdataläge, utlösarintervall och vattenstämpel. Se Stream-stream-kopplingar.

Ström-statiska kopplingar är tillståndslösa, men ger ett bra alternativ för att ansluta en inkrementell datakälla (till exempel en faktatabell) med en statisk datakälla (till exempel en långsamt föränderlig dimensionstabell). I stället för att koppla alla poster från båda sidor varje gång en fråga körs, kopplas endast nyligen mottagna poster från strömningskällan till den aktuella versionen av den statiska tabellen. Se Stream-static-kopplingar.

Batchkopplingar

Azure Databricks stöder standardsyntax för SQL-koppling, inklusive inre, yttre, semi, anti och korskopplingar. Mer information finns i Anslut.

Kommentar

Databricks rekommenderar att du använder en materialiserad vy för att optimera inkrementell beräkning av resultatet av en inre koppling. Se Använda materialiserade vyer i Databricks SQL.

Stream-stream-kopplingar

Att ansluta till två strömmande datakällor kan innebära stora utmaningar när det gäller att hantera tillståndsinformation och resonemang om resultatberäkning och utdata. Innan du implementerar en stream-stream-anslutning rekommenderar Databricks att du utvecklar en stark förståelse för driftssemantiken för tillståndskänslig strömning, inklusive hur vattenstämplar påverkar tillståndshanteringen. Mer information finns i följande artiklar:

Databricks rekommenderar att du anger vattenstämplar för båda sidor av alla strömångkopplingar. Följande kopplingstyper stöds:

  • Inre kopplingar
  • Vänster yttre kopplingar
  • Höger yttre kopplingar
  • Fullständiga yttre kopplingar
  • Vänster halvkopplingar

Se dokumentationen om Apache Spark Structured Streaming om stream-steam-kopplingar.

Strömstatiska kopplingar

Kommentar

Det beskrivna beteendet för ström-statiska kopplingar förutsätter att statiska data lagras med Delta Lake.

En ström-statisk koppling kopplar den senaste giltiga versionen av en Delta-tabell (statiska data) till en dataström med hjälp av en tillståndslös koppling.

När Azure Databricks bearbetar en mikrobatch med data i en strömstatisk koppling ansluter den senaste giltiga versionen av data från den statiska Delta-tabellen till posterna som finns i den aktuella mikrobatchen. Eftersom kopplingen är tillståndslös behöver du inte konfigurera vattenstämpel och kan bearbeta resultat med låg svarstid. Data i den statiska Delta-tabellen som används i kopplingen bör ändras långsamt.

I följande exempel visas det här mönstret:

streamingDF = spark.readStream.table("orders")
staticDF = spark.read.table("customers")

query = (streamingDF
  .join(staticDF, streamingDF.customer_id==staticDF.id, "inner")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .table("orders_with_customer_info")
)

Optimera kopplingsprestanda

Beräkning med Photon aktiverat väljer alltid den bästa kopplingstypen. Se Vad är Photon?.

Att använda en ny Databricks Runtime-version med Photon aktiverat ger vanligtvis bra kopplingsprestanda, men du bör också överväga följande rekommendationer:

  • Korskopplingar är mycket dyra. Ta bort korskopplingar från arbetsbelastningar och frågor som kräver låg svarstid eller frekvent omkomputation.

  • Kopplingsordningen är viktig. När du utför flera kopplingar ansluter du alltid dina minsta tabeller först och ansluter sedan resultatet till större tabeller.

  • Optimeraren kan kämpa med frågor med många kopplingar och sammansättningar. Om du sparar mellanliggande resultat kan frågeplaneringen och databehandlingsresultaten påskyndas.

  • Håll färsk statistik för att förbättra prestanda. Förutsägelseoptimering med ANALYZE (offentlig förhandsversion) kan automatiskt uppdatera och underhålla statistik. Du kan också köra frågan ANALYZE TABLE table_name COMPUTE STATISTICS för att uppdatera statistik i frågehanteraren.

Viktigt!

Förutsägelseoptimering med ANALYZE finns i offentlig förhandsversion. Den innehåller intelligent statistikinsamling under skrivningar. Använd det här formuläret för att registrera dig för den offentliga förhandsversionen.

Kommentar

I Databricks Runtime 14.3 LTS och senare kan du ändra de kolumner som Delta Lake samlar in statistik om för datahoppning och sedan omkomponera befintlig statistik i Delta-loggen. Se Ange deltastatistikkolumner.

Delta i tips om Azure Databricks

Apache Spark har stöd för att ange kopplingstips för intervallkopplingar och skeva kopplingar. Tips för skeva kopplingar behövs inte eftersom Azure Databricks automatiskt optimerar dessa kopplingar. Se Tips

Tips för intervallkopplingar kan vara användbara om anslutningens prestanda är dålig och du utför ojämlikhetskopplingar. Exempel är att ansluta till tidsstämpelintervall eller ett antal klustrings-ID:t. Se Optimering av intervallkoppling.