Condividi tramite


Funzione from_avro

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

Restituisce un valore struct con avroBin e jsonSchemaStr.

Sintassi

from_avro(avroBin, jsonSchemaStr [, options] )

Argomenti

  • avroBinBINARY: 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 facoltativo 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.

Note

Sono supportate le opzioni seguenti:

Opzione valore Descrizione
'mode' 'PERMISSIVE', 'FAILFAST' In PERMISSIVE modalità, tutti gli oggetti o i campi danneggiati in un oggetto vengono impostati su NULL anziché generare un errore.
compression 'uncompressed', 'snappy'' 'deflade, 'bzip2', , 'xz', 'zstandard' Specifica il codec di compressione usato per codificare i dati Avro.

Per altre opzioni, vedere Leggere e scrivere dati Avro in streaming.

Esempi

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

> SELECT from_avro(to_avro(5, '{ "type" : "int" }'), '{ "type" : "int" }');
  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"}]}');
  {"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}