Funzione from_avro

Si applica a:segno di spunta sì Databricks Runtime 16.0 e versioni successive

Restituisce un valore struct con avroBin e jsonSchemaStr.

Sintassi

from_avro(avroBin, jsonSchemaStr, options )

Argomenti

  • avroBin BINARY: espressione che specifica una riga di dati Avro.
  • avroSchemaSpec: schema di destinazione in formato JSON. Deve corrispondere allo schema codificato in avroBin come specificato in to_avro().
  • options: valore letterale MAP<STRING,STRING> che specifica le direttive.

Valori restituiti

Oggetto STRUCT con nomi di campo e tipi basati sul risultato di schema_of_json(jsonStr).

avroBin deve essere ben formato rispetto a avroSchemaSpec e options o Databricks genera un'eccezione.

Opzioni

Opzione Valori Descrizione
mode FAILFAST, PERMISSIVE Modalità di gestione degli errori. Impostazione predefinita: FAILFAST. In PERMISSIVE modalità, i record danneggiati vengono impostati su NULL invece di generare un errore.
compression uncompressed, snappy, deflate, bzip2, xzzstandard Codec di compressione per la codifica dei dati Avro.
avroSchemaEvolutionMode none, restart Modalità di evoluzione dello schema. Impostazione predefinita: none. Se impostato su restart, la query genera un'eccezione UnknownFieldException quando lo schema viene modificato. Riavviare il processo per usare il nuovo schema. Vedere Usare la modalità di evoluzione dello schema con from_avro.
recursiveFieldMaxDepth Intervallo: -1 da a 15 Profondità massima di ricorsione lungo un singolo percorso ricorsivo. Impostazione predefinita: -1, che non limita la profondità di ricorsione.
Quando un tipo condiviso è raggiungibile da molti percorsi di schema distinti, l'espansione dello schema potrebbe causare la perdita di memoria del driver perché questa opzione limita la profondità su un solo percorso. Per risolvere il problema:

Esempi

> SELECT from_avro(to_avro(5), '{ "type" : "int" }', NULL:MAP<STRING, STRING>);
  5

> SELECT from_avro(to_avro(5, '{ "type" : "int" }'), '{ "type" : "int" }', NULL:MAP<STRING, STRING>);
  5

> SELECT from_avro(to_avro(named_struct('num', 5, 'txt', 'hello')), '{ "type" : "record", "name": "my_record", "fields": [{ "name": "num", "type": "int"}, { "name": "txt", "type": "string"}]}', NULL:MAP<STRING, STRING>);
  {"num":5,"txt":"hello"}

> SELECT from_avro(to_avro(named_struct('num', 5, 'txt', 'hello')),
                   '{ "type" : "record", "name": "my_record", "fields": [{ "name": "num", "type": "int"}, { "name": "txt", "type": "double"}]}',
                   map('mode', 'failfast'));
  Error: Avro data is not valid for the specified schema.

> SELECT from_avro(to_avro(named_struct('num', 5, 'txt', 'hello')),
                   '{ "type" : "record", "name": "my_record", "fields": [{ "name": "num", "type": "int"}, { "name": "txt", "type": "double"}]}',
                   map('mode', 'permissive'));
  {"num":null,"txt":null}