Zerobus-Rettungskolonne

Important

Die Wiederherstellungsspalte befindet sich in Beta und unterstützt derzeit die Erfassung im JSON-Format. Workspace-Administratoren können es auf der Seite Vorschauen aktivieren, indem sie sich für die Vorschau Zerobus rescue column entscheiden. Siehe Manage Azure Databricks Previews.

Standardmäßig lehnt Zerobus Ingest in Lakeflow Connect jeden Datensatz ab, der Felder enthält, die nicht mit dem Schema der Zieltabelle übereinstimmen. Mit der Funktion „Rettungsspalte“ können Sie diese nicht konformen Felder erfassen, statt sie zu verlieren. Felder, die nicht in das Schema passen, werden in einem JSON-Objekt gruppiert und in einer bestimmten Rettungsspalte als VARIANT Typ gespeichert.

Die Wiederherstellungsspalte unterstützt derzeit die Erfassung im JSON-Format. Wenn du mit Protocol Buffers (Protobuf) oder Apache Arrow importierst, plane dein Schema so, dass die Datensätze zur Tabelle passen, denn nicht konforme Felder werden abgelehnt und nicht gerettet.

Die Rettungsspalte ist eine von drei Möglichkeiten, um zu bestimmen, wie streng Ihre Tabelle eingehende Daten validiert. Für das vollständige Bild siehe Drei Möglichkeiten, den Vertrag zu gestalten.

Rettungsspalte konfigurieren

Um eine Spalte als Rettungsspalte festzulegen, muss die Spalte:

  • Nullwerte zulassen.
  • Verwenden Sie den VARIANT Typ.
  • Sorgen Sie dafür, dass das zerobus-rescue Tag in Unity Catalog angewendet wird.

Genau eine Spalte sollte alle drei Kriterien erfüllen. Zerobus behandelt die anderen Fälle wie folgt:

  • Keine Spalte erfüllt alle drei Kriterien: Das Feature "Rettungsspalte" ist inaktiv, und Zerobus lehnt nicht kompatible Felder ab, wie es ohne das Feature wäre.
  • Mehrere Spalten erfüllen alle drei Kriterien: Zerobus wählt beliebig eins aus. Um Mehrdeutigkeit zu vermeiden, überprüfen Sie, ob nur eine Spalte qualifiziert ist.

Änderungen an der Spaltenkennzeichnung können bis zu 5 Minuten dauern, bis sie wirksam werden.

Wenn Zerobus in die Rescue-Spalte schreibt

Zerobus Ingest routet jedes Feld in einem Datensatz basierend darauf, wie es ins Tabellenschema passt:

Feld im Datensatz Ergebnis
Entspricht einer Spalte in der Tabelle (Name und Typ) Wird normalerweise in diese Spalte geschrieben.
Nicht im Tabellenschema vorhanden In der Rettungskolonne gefangen genommen.
Im Tabellenschema vorhanden, aber der Werttyp stimmt nicht überein, und die Zielspalte ist nullierbar In der Rettungskolonne gefangen genommen.

Nur nicht konforme Felder werden in die Rescue-Spalte verschoben. Felder, die dem Schema entsprechen, werden immer in eigene Spalten geschrieben.

Beispiel: Typkonflikt und zusätzliches Feld

Das folgende Beispiel zeigt einen Typkonflikt und ein zusätzliches Feld, die beide in die Spalte rescue geleitet werden. Betrachten Sie eine Tabelle mit dem folgenden Schema, wobei rescue NULL sein kann, den Typ VARIANT verwendet und in Unity Catalog mit dem Tag zerobus-rescue versehen ist:

CREATE TABLE main.default.air_quality (
  device_name STRING NOT NULL,
  temp INT,
  humidity LONG,
  rescue VARIANT
);

In diesem Beispiel wird der folgende JSON-Eintrag aufgenommen:

{
  "device_name": "sensor-1",
  "temp": "72F",
  "humidity": 87,
  "extra_field": "some value"
}

Der Datensatz erzeugt die folgende Zeile in der Ziel-Delta-Tabelle:

device_name temp humidity rescue
sensor-1 null 87 {"extra_field": "some value", "temp": "72F"}

Ergebnis jeder Spalte:

  • device_name wird normal geschrieben, da der Nutzlastwert dem Typ der Spalte STRING entspricht.
  • temp wird als null geschrieben, weil der Nutzlastwert ("72F", eine Zeichenfolge) nicht mit dem Datentyp der Spalte INT übereinstimmt.
  • humidity wird normal geschrieben, da der Nutzlastwert dem Typ der Spalte entspricht.
  • extra_field ist nicht im Tabellenschema, daher wird es nach rescue geschrieben, anstatt abgelehnt zu werden.

Zerobus gruppiert sowohl die nicht konformen Felder temp und extra_field in das JSON-Objekt der Spalte rescue.

Einschränkungen

Beim Einsatz der Rettungssäule gelten folgende Einschränkungen:

  • Die Rescue-Spalte ist reserviert, das heißt, dass die Datensatznutzlast für diese Spalte keinen expliziten Nicht-Null-Wert angeben kann. Falls ein Datensatz dies tut, wird er mit einer Fehlermeldung zurückgewiesen. Ein null Wert für die Rettungsspalte ist zulässig und wird ignoriert, genauso wie ein beliebiges nicht vorhandenes Feld oder null Feld.
  • Ein Feld, das in der JSON-Payload auf null gesetzt ist, wird genauso behandelt wie ein fehlendes Feld und nicht in die Rescue-Spalte geschrieben.
  • Wenn die Nutzlast mehrere Einträge für denselben Schlüssel enthält, gewinnt der letzte Wert nach der standardmäßigen JSON-Analysekonvention.