Funktionen from_avro

Gäller för:kryssat 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 MAP<STRING,STRING> literal som specificerar 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.

Alternativ

Alternativ Värden beskrivning
mode FAILFAST, PERMISSIVE Felhanteringsläge. Förvald: FAILFAST. I PERMISSIVE läget är skadade poster inställda på i stället för att NULL skapa ett fel.
compression uncompressed, snappy, deflate, bzip2, , , xzzstandard Komprimeringskodc för kodning av Avro-data.
avroSchemaEvolutionMode none, restart Schemautvecklingsläge. Förvald: none. När den är inställd restartpå genererar frågan ett UnknownFieldException när schemat ändras. Starta om jobbet för att använda det nya schemat. Se Använda schemautvecklingsläge med from_avro.
recursiveFieldMaxDepth Intervall: -1 till 15 Maximalt rekursionsdjup längs en enda rekursiv sökväg. Standard: -1, som inte begränsar rekursionsdjupet.
När en delad typ kan nås från många distinkta schemasökvägar kan schemaexpansionen leda till att drivrutinen får slut på minne eftersom det här alternativet begränsar djupet endast på en sökväg. Så här löser du följande:

Exempel

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