from_avro-Funktion

Gilt für:[ja markiert] Databricks Runtime 16.0 und höher

Gibt einen Strukturwert mit avroBin und jsonSchemaStr zurück.

Syntax

from_avro(avroBin, jsonSchemaStr, options )

Argumente

  • avroBin: Ein BINARY Ausdruck, der eine Zeile mit Avro-Daten angibt.
  • avroSchemaSpec: Das Zielschema im JSON-Format. Es muss mit dem in to_avro()avroBinSchema übereinstimmen.
  • options: Ein MAP<STRING,STRING>-Literal, der Direktiven angibt.

Gibt zurück

A STRUCT mit Feldnamen und Typen basierend auf dem Ergebnis von schema_of_json(jsonStr).

avroBin muss in Bezug auf die avroSchemaSpec und oder options Databricks wohlgeformt sein, löst eine Ausnahme aus.

Optionen

Auswahlmöglichkeit Werte Beschreibung
mode FAILFAST, PERMISSIVE Fehlerbehandlungsmodus. Standardwert: FAILFAST. Im PERMISSIVE Modus werden beschädigte Datensätze anstelle eines Fehlers festgelegt NULL .
compression uncompressed, , snappydeflate, bzip2, , xzzstandard Komprimierungscodec zum Codieren von Avro-Daten.
avroSchemaEvolutionMode none, restart Schemaentwicklungsmodus. Standardwert: none. Bei Festlegung auf restartwird eine UnknownFieldException Abfrage ausgelöst, wenn sich das Schema ändert. Starten Sie den Auftrag neu, um das neue Schema zu verwenden. Siehe Verwenden des Schemaentwicklungsmodus mit from_avro.
recursiveFieldMaxDepth Bereich: -1 bis 15 Maximale Rekursionstiefe entlang eines einzelnen rekursiven Pfads. Standard: -1, wodurch die Rekursionstiefe nicht eingeschränkt wird.
Wenn ein freigegebener Typ aus vielen unterschiedlichen Schemapfaden erreichbar ist, kann die Schemaerweiterung dazu führen, dass der Treiber nicht genügend Arbeitsspeicher hat, da diese Option nur eine Tiefe auf einem Pfad begrenzt. So umgehen Sie Folgendes:

Beispiele

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