Freigeben über


Modellieren teilweise strukturierter Daten

In diesem Artikel werden Muster zum Speichern teilweise strukturierter Daten empfohlen, die von der Datennutzung Ihrer Organisation abhängen. Azure Databricks stellt Funktionen, native Datentypen und Abfragesyntax für die Verwendung teilweise strukturierter, geschachtelter und komplexer Daten bereit.

Die folgenden Überlegungen wirken sich auf das Muster aus, das Sie verwenden sollten:

  • Ändern sich die Felder oder Typen in der Datenquelle häufig?
  • Wie viele eindeutige Felder enthält die Datenquelle insgesamt?
  • Müssen Sie Ihre Workloads für Schreib- oder Lesevorgänge optimieren?

Databricks empfiehlt, Daten für nachgeschaltete Abfragen als Deltatabellen zu speichern.

Variante verwenden

In Databricks Runtime 15.3 und höher können Sie den VARIANT Typ verwenden, um halbstrukturierte JSON-Daten mithilfe einer optimierten Codierung zu speichern, die JSON-Zeichenfolgen für Lese- und Schreibvorgänge übertrifft.

Der VARIANT Typ hat ähnliche Anwendungen wie JSON-Zeichenfolgen. Einige Workloads profitieren weiterhin von der Verwendung von Strukturen, Karten und Arrays, insbesondere für Daten mit bekannten Schemas, die von optimierten Datenlayouts und Statistikensammlung profitieren würden.

Weitere Einzelheiten finden Sie in den folgenden Artikeln:

Verwenden von JSON-Zeichenfolgen

Sie können Daten in einer einzelnen Zeichenfolgenspalte im JSON-Standardformat speichern und dann Felder im JSON-Format mit :-Notation abfragen.

Viele Systeme geben Datensätze als Zeichenfolgen oder als bytecodierte JSON-Datensätze aus. Das Erfassen und Speichern dieser Datensätze als Zeichenfolgen verursacht einen sehr geringen Verarbeitungsaufwand. Sie können auch die to_json-Funktion verwenden, um beliebige Datenstrukturen in eine JSON-Zeichenfolge umzuwandeln.

Berücksichtigen Sie bei der Entscheidung zur Speicherung der Daten als JSON-Zeichenfolgen die folgenden Vor- und Nachteile:

  • Alle Werte werden als Zeichenfolgen ohne Typinformationen gespeichert.
  • JSON unterstützt alle Datentypen, die als Text dargestellt werden können.
  • JSON unterstützt Zeichenfolgen beliebiger Länge.
  • Es gibt keine Grenzwerte für die Anzahl der Felder, die in einer einzelnen JSON-Datenspalte dargestellt werden können.
  • Vor dem Schreiben in die Tabelle ist keine Vorverarbeitung der Daten erforderlich.
  • Sie können Typprobleme innerhalb der Daten in nachgeschalteten Workloads auflösen.
  • Beim Lesen bietet JSON die schlechteste Leistung, da Sie die gesamte Zeichenfolge für jede Abfrage parsen müssen.

JSON-Zeichenfolgen bieten eine hohe Flexibilität und eine einfach zu implementierende Lösung zum Abrufen von Rohdaten in eine Lakehousetabelle. Sie können JSON-Zeichenfolgen für viele Anwendungen verwenden, sie eignen sich aber besonders, wenn das wichtigste Ergebnis einer Workload die Speicherung einer vollständigen und genauen Darstellung einer Datenquelle für die nachgelagerte Verarbeitung ist. Mögliche Anwendungsfälle:

  • Erfassen von Streamingdaten aus einem Warteschlangendienst wie Kafka
  • Aufzeichnen von Antworten auf REST-API-Abfragen
  • Speichern von Rohdatensätzen aus einer Upstream-Datenquelle, die nicht von Ihrem Team gesteuert wird

Sofern Ihre Erfassungslogik flexibel ist, sollte das Speichern von Daten als JSON-Zeichenfolge ausfallsicher sein, selbst wenn neue Felder, Änderungen in der Datenstruktur oder Typänderungen in der Datenquelle auftreten. Solche Änderungen können zwar Fehler bei nachgelagerten Workloads auslösen, aber Ihre Tabelle enthält trotzdem einen vollständigen Verlauf der Quelldaten, sodass Sie Probleme beheben können, ohne auf die Datenquelle zurückgreifen zu müssen.

Verwenden von Strukturen

Sie können teilweise strukturierte Daten mit Strukturen speichern und alle nativen Funktionen von Spalten aktivieren und gleichzeitig die geschachtelte Struktur der Datenquelle beibehalten.

Delta Lake behandelt Daten, die als Strukturen gespeichert sind, genauso wie alle anderen Spalten, es gibt als keinen funktionalen Unterschied zwischen Strukturen und Spalten. Die vom Delta Lake verwendeten Parquet-Datendateien erstellen eine Spalte für jedes Feld in einer Struktur. Sie können Strukturfelder als Clusteringspalten oder Partitionierungsspalte verwenden, und Sie können Statistiken zu Strukturen für das Überspringen von Daten sammeln.

Strukturen bieten in der Regel die beste Leistung beim Lesen, da sie alle Datensprungoptimierungen unterstützen und Einzelfelder als Spalten speichern. Wenn die Anzahl der Spalten in die Hunderte geht, kann dies zu Leistungseinbußen führen.

Jedes Feld in einer Struktur weist einen Datentyp auf, der beim Schreiben wie bei Spalten erzwungen wird. Daher ist eine vollständige Vorverarbeitung der Daten erforderlich. Dies kann von Vorteil sein, wenn Sie nur überprüfte Daten verwenden möchten, die in eine Tabelle committet wurden. Beim Verarbeiten nicht wohlgeformter Datensätze aus Upstreamsystemen kann dies jedoch dazu führen, dass Daten verworfen werden oder Aufträge Fehler auslösen.

Strukturen sind bei der Schemaentwicklung nicht so flexibel wie JSON-Datenströme, und zwar unabhängig davon, ob es um das Entwickeln von Datentypen oder das Hinzufügen neuer Felder geht.

Verwenden von Zuordnungen und Arrays

Sie können eine Kombination aus Zuordnungen und Arrays verwenden, um teilweise strukturierte Datenformate nativ in Delta Lake zu replizieren. Für Felder, die mit diesen Typen definiert sind, können keine Statistiken gesammelt werden, aber sie bieten eine ausgewogene Leistung sowohl bei Lese- als auch bei Schreibvorgängen für teilweise strukturierte Datasets mit ca. 500 Feldern.

Sowohl der Schlüssel als auch der Wert von Zuordnungen sind typisiert, sodass die Daten vorverarbeitet werden und das Schema beim Schreiben erzwungen wird.

Um Abfragen zu beschleunigen, empfiehlt Databricks, Felder, die häufig zum Filtern von Daten verwendet werden, als separate Spalten zu speichern.

Muss ich meine Daten vereinfachen?

Wenn Sie Ihre Daten mithilfe von JSON oder Zuordnungen speichern, sollten Sie Felder, die häufig zum Filtern von Abfragen verwendet werden, als Spalten speichern. Für Felder in JSON-Zeichenfolgen oder Zuordnungen stehen keine Funktionen zum Erfassen von Statistiken, zum Partitionieren oder für das Clustering zur Verfügung. Diese Aktionen sind für Daten, die als Struktur gespeichert sind, nicht erforderlich.

Syntax für die Verwendung geschachtelter Daten

Unter den folgenden Ressourcen finden Sie weitere Informationen zur Verwendung geschachtelter Daten: