Freigeben über


Arbeiten mit Verknüpfungen in Azure Databricks

Databricks unterstützt die ANSI-Standardverknüpfungssyntax. In diesem Artikel werden Unterschiede zwischen Verknüpfungen mit Batch- und Datenstromverarbeitung beschrieben.

Hinweis

Databricks unterstützt auch die Standardsyntax für die Mengenoperatoren UNION, INTERSECT und EXCEPT. Siehe Mengenoperatoren.

Unterschiede zwischen Streaming- und Batchverknüpfungen

Verknüpfungen in Azure Databricks sind entweder zustandsbehaftet oder zustandslos.

Alle Batchverknüpfungen sind zustandslose Verknüpfungen. Ergebnisse werden sofort verarbeitet und spiegeln Daten zum Zeitpunkt der Ausführung der Abfrage wider. Jedes Mal, wenn die Abfrage ausgeführt wird, werden neue Ergebnisse basierend auf den angegebenen Quelldaten berechnet. Siehe Batchverknüpfungen.

Verknüpfungen zwischen zwei Streamingdatenquellen sind zustandsbehaftet. In zustandsbehafteten Verknüpfungen verfolgt Azure Databricks Informationen zu den Datenquellen und den Ergebnissen und aktualisiert die Ergebnisse iterativ. Zustandsbehaftete Verknüpfungen können leistungsstarke Lösungen für die Online-Datenverarbeitung bereitstellen, können aber schwierig zu implementieren sein. Sie verfügen je nach Ausgabemodus, Triggerintervall und Grenzwerte über komplexe betriebstechnische Semantik. Siehe Stream-Stream-Verknüpfungen.

Stream-statische Verknüpfungen sind zustandslos, bieten aber eine gute Option zum Verknüpfen einer inkrementellen Datenquelle (z. B. einer Faktentabelle) mit einer statischen Datenquelle (z. B. einer sich langsam ändernden dimensionalen Tabelle). Anstatt alle Datensätze von beiden Seiten bei jeder Ausführung einer Abfrage zu verknüpfen, werden nur neu empfangene Datensätze aus der Streamingquelle mit der aktuellen Version der statischen Tabelle verknüpft. Siehe Stream-statische Verknüpfungen.

Batchverknüpfungen

Azure Databricks unterstützt standardmäßige SQL-Verknüpfungssyntax, einschließlich innerer, äußerer, Semi-, Anti- und Kreuzverknüpfungen. Siehe JOIN.

Hinweis

Databricks empfiehlt die Verwendung einer materialisierten Ansicht, um die inkrementelle Berechnung der Ergebnisse einer inneren Verknüpfung zu optimieren. Siehe Materialisierte Ansichten.

Stream-Stream-Verknüpfungen

Das Verknüpfen zweier Streamingdatenquellen kann erhebliche Herausforderungen beim Verwalten von Zustandsinformationen und Auswerten von Berechnungs- und Ausgabeergebnissen mit sich bringen. Vor der Implementierung einer Stream-Stream-Verknüpfung empfiehlt Databricks, ein umfassendes Verständnis der operativen Semantik für zustandsbehaftetes Streaming zu entwickeln, einschließlich der Auswirkungen von Grenzwerten auf die Zustandsverwaltung. Weitere Informationen finden Sie in folgenden Artikeln:

Databricks empfiehlt die Angabe von Wasserzeichen für beide Seiten aller Datenstromverknüpfungen. Folgende Untertypen werden unterstützt:

  • Innere Verknüpfungen
  • Linke äußere Joins
  • Rechte äußere Joins
  • Vollständige äußere Joins
  • Linke Semiverknüpfungen

Weitere Informationen finden Sie in der Dokumentation zu Apache Spark Structured Streaming unter Stream-Stream-Joins.

Streamstatik-Verknüpfungen

Hinweis

Das beschriebene Verhalten für Stream-statische Verknüpfungen geht davon aus, dass die statischen Daten mithilfe von Delta Lake gespeichert werden.

Bei einer Stream-statisch-Verknüpfung wird die neueste gültige Version einer Delta-Tabelle (die statischen Daten) mithilfe einer zustandslosen Verknüpfung mit einem Datenstrom verknüpft.

Wenn Azure Databricks einen Mikrobatch von Daten in einer Stream-statisch-Verknüpfung verarbeitet, wird die neueste gültige Version von Daten aus der statischen Delta-Tabelle mit den Datensätzen verknüpft, die im aktuellen Mikrobatch enthalten sind. Da die Verknüpfung zustandslos ist, müssen Sie keine Wasserzeichen konfigurieren und können die Ergebnisse mit geringer Latenz verarbeiten. Die Daten in der statischen Delta-Tabelle, die in der Verknüpfung verwendet werden, sollten nur selten geändert werden.

Dieses Muster wird im folgenden Beispiel veranschaulicht:

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

Verknüpfungshinweise in Azure Databricks

Apache Spark unterstützt das Angeben von Verknüpfungshinweisen für Bereichsverknüpfungen und Neigungsverknüpfungen. Hinweise für Neigungsverknüpfungen sind nicht erforderlich, da Azure Databricks diese Verknüpfungen automatisch optimiert. Siehe Hinweise.

Hinweise für Bereichsverknüpfungen können nützlich sein, wenn die Verknüpfungsleistung schlecht ist und Sie ungleiche Verknüpfungen vornehmen. Beispiele hierfür sind das Verknüpfen von Zeitstempelbereichen oder ein Bereich von Clustering-IDs. Siehe Optimierung der Bereichsverknüpfung und Optimierung der Verknüpfungsleistung in Azure Databricks.