Colonna di soccorso Zerobus

Importante

La colonna di salvataggio è in Beta e attualmente supporta l'ingestione in formato JSON. Gli amministratori del workspace possono abilitarla dalla pagina Anteprime attivando l'anteprima Colonna di ripristino Zerobus. Vedere Gestire le anteprime di Azure Databricks.

Di default, Zerobus Ingest in Lakeflow Connect rifiuta qualsiasi record che contenga campi che non corrispondono allo schema della tabella di destinazione. La funzionalità colonna di salvataggio consente di acquisire i campi non conformi anziché perderli. I campi che non rientrano nello schema vengono raggruppati in un oggetto JSON e archiviati in una colonna di salvataggio designata come VARIANT tipo.

La rubrica di salvataggio attualmente supporta l'ingestione in formato JSON. Se fai ingest con Protocol Buffers (protobuf) o Apache Arrow, pianifica il tuo schema in modo che i record si adattino alla tabella, perché i campi non conformi vengono rifiutati invece che salvati.

La colonna di recupero è uno dei tre modi per definire con quanto rigore la tabella convalida i dati in ingresso. Per il quadro completo, vedi Tre modi per modellare il contratto.

Configurare una colonna di salvataggio

Per designare una colonna come colonna di salvataggio, la colonna deve:

  • Consenti valori Null.
  • Usare il tipo VARIANT.
  • Applicare il zerobus-rescue tag in Unity Catalog.

Esattamente una colonna deve soddisfare tutti e tre i criteri. Zerobus gestisce gli altri casi come segue:

  • Nessuna colonna soddisfa tutti e tre i criteri: la funzionalità della colonna di salvataggio è inattiva e Zerobus rifiuta i campi non conformi in quanto senza la funzionalità.
  • Più colonne soddisfano tutti e tre i criteri: Zerobus seleziona una in modo arbitrario. Per evitare ambiguità, verificare che una sola colonna sia idonea.

L'applicazione delle modifiche all'assegnazione di tag alle colonne potrebbe richiedere fino a 5 minuti.

Quando Zerobus scrive nella colonna di salvataggio

Zerobus Ingest instrada ogni campo in un record in base a come si adatta allo schema della tabella:

Campo nel record Risultato
Corrisponde a una colonna della tabella (nome e tipo) Scritto normalmente in quella colonna.
Non presente nello schema della tabella Catturato nella colonna di soccorso.
Presente nello schema della tabella, ma il tipo del valore non corrisponde e la colonna di destinazione è nullabile Catturato nella colonna di soccorso.

Solo i campi non conformi passano alla colonna di salvataggio. I campi conformi allo schema vengono sempre scritti nelle rispettive colonne.

Esempio: mancata corrispondenza del tipo e campo aggiuntivo

L'esempio seguente mostra una mancata corrispondenza del tipo e un campo aggiuntivo, entrambi indirizzati alla rescue colonna. Si consideri una tabella con il seguente schema, in cui rescue ammette valori null, usa il tipo VARIANT e ha applicato il tag zerobus-rescue in Unity Catalog:

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

Questo esempio inserisce il record JSON seguente:

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

Il record genera la riga seguente nella tabella Delta di destinazione:

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

Risultato di ogni colonna:

  • device_name viene scritto normalmente perché il valore del payload corrisponde al tipo della STRING colonna.
  • temp viene scritto come null perché il valore del payload ("72F", una stringa) non corrisponde al tipo della INT colonna.
  • humidity viene scritto normalmente perché il valore del payload corrisponde al tipo della colonna.
  • extra_field non è nello schema della tabella, quindi viene scritto in rescue anziché essere rifiutato.

Zerobus raggruppa entrambi i campi non conformi, temp e extra_field, nell'oggetto JSON della colonna rescue.

Limitazioni

Si applicano le seguenti limitazioni quando si utilizza la colonna di salvataggio:

  • La colonna rescue è riservata, il che significa che il payload del record non può fornire per essa un valore esplicito diverso da null. In caso affermativo, viene rifiutato con un errore. Il valore null per la colonna rescue è consentito e viene ignorato, così come qualsiasi campo assente o con valore null.
  • Un campo impostato su null nel payload JSON viene considerato come un campo assente e non viene scritto nella colonna di salvataggio.
  • Se il payload contiene più voci per la stessa chiave, l'ultimo valore prevale, seguendo la convenzione di analisi JSON standard.