Delen via


from_avro functie

Van toepassing op:selectievakje gemarkeerd als ja Databricks Runtime 16.0 en hoger

Retourneert een struct-waarde met de avroBin en jsonSchemaStr.

Syntaxis

from_avro(avroBin, jsonSchemaStr, options )

Argumenten

  • avroBin: Een BINARY expressie die een rij met Avro-gegevens opgeeft.
  • avroSchemaSpec: Het doelschema in JSON-indeling. Het moet overeenkomen met het schema dat in avroBin is gecodeerd zoals opgegeven in to_avro().
  • options: een MAP<STRING,STRING> letterlijke vermelding van instructies.

Retouren

Een STRUCT met veldnamen en -typen op basis van het resultaat van schema_of_json(jsonStr).

avroBin moet goed zijn gevormd met betrekking tot de avroSchemaSpec en options of Databricks genereert een uitzondering.

Opmerkingen

De volgende opties worden het meest ondersteund:

Optie Waarde Beschrijving
'mode' 'PERMISSIVE', 'FAILFAST' In de PERMISSIVE-modus worden alle beschadigde objecten of velden in een object ingesteld op NULL in plaats van een foutmelding te genereren.
compression 'uncompressed', 'snappy', 'deflade, 'bzip2', 'xz', 'zstandard' Hiermee geeft u de compressiecodec op die wordt gebruikt om de Avro-gegevens te coderen.

Voor meer opties, zie Lees- en schrijfbewerkingen van streaming Avro-gegevens.

Voorbeelden

> 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}