Dela via


Funktionen from_avro

gäller för:med kryss markerat ja Databricks Runtime 16.0 och senare

Returnerar ett struct-värde med avroBin och jsonSchemaStr.

Syntax

from_avro(avroBin, jsonSchemaStr [, options] )

Argument

  • avroBin: Ett BINARY uttryck som anger en rad med Avro-data.
  • avroSchemaSpec: Målschemat i JSON-format. Det måste matcha schemat som kodas i avroBin enligt to_avro().
  • options: En valfri MAP<STRING,STRING> literal som anger direktiv.

Returer

A STRUCT med fältnamn och typer baserat på resultatet av schema_of_json(jsonStr).

avroBin måste vara välformulerad med avseende på avroSchemaSpec och options eller Databricks genererar ett undantag.

Kommentar

Följande alternativ stöds oftast:

Alternativ Värde beskrivning
'mode' 'PERMISSIVE', 'FAILFAST' I PERMISSIVE läget är alla skadade objekt eller fält i ett objekt inställda på i stället för att NULL skapa ett fel.
compression 'uncompressed', 'snappy', 'deflade', 'bzip2', , 'xz''zstandard' Anger den komprimeringskodc som används för att koda Avro-data.

Fler alternativ finns i Läsa och skriva strömmande Avro-data.

Exempel

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