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.

Opties

Optie Waarden Beschrijving
mode FAILFAST, PERMISSIVE Foutafhandelingsmodus. Standaard: FAILFAST. In PERMISSIVE de modus worden beschadigde records ingesteld op NULL in plaats van een fout op te geven.
compression uncompressed, , snappydeflate, bzip2, , , xzzstandard Compressiecodec voor het coderen van Avro-gegevens.
avroSchemaEvolutionMode none, restart De evolutiemodus van het schema. Standaard: none. Als deze is ingesteld restartop, genereert de query een UnknownFieldException wanneer het schema wordt gewijzigd. Start de taak opnieuw op om het nieuwe schema te gebruiken. Zie De modus Schemaontwikkeling gebruiken met from_avro.
recursiveFieldMaxDepth Bereik: -1 tot 15 Maximale recursiediepte langs één recursief pad. Standaard: -1, waarmee de recursiediepte niet wordt beperkt.
Wanneer een gedeeld type bereikbaar is vanaf veel verschillende schemapaden, kan de schema-uitbreiding ertoe leiden dat het stuurprogramma onvoldoende geheugen heeft omdat deze optie alleen diepte voor één pad begrenst. Tijdelijke oplossing:

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}