Funkce from_avro

Platí pro:zaškrtnuto ano Databricks Runtime 16.0 a vyšší

Vrátí hodnotu struktury s hodnotou avroBin a jsonSchemaStr.

Syntaxe

from_avro(avroBin, jsonSchemaStr, options )

Argumenty

  • avroBin: Výraz BINARY určující řádek dat Avro.
  • avroSchemaSpec: Cílové schéma ve formátu JSON. Musí odpovídat schématu zakódovanému v , jak je uvedeno vto_avro().
  • options: Literál MAP<STRING,STRING> určující direktivy.

Návraty

A STRUCT s názvy a typy polí na základě výsledku schema_of_json(jsonStr).

avroBin musí být ve správném formátu s ohledem na avroSchemaSpec a options, jinak Databricks vyvolá výjimku.

Možnosti

Úplný seznam možností najdete v tématu Avro.

Možnost Hodnoty Popis
mode FAILFAST, PERMISSIVE Režim zpracování chyb Výchozí hodnota: FAILFAST. V PERMISSIVE režimu jsou poškozené záznamy nastavené na NULL místo vyvolání chyby.
compression uncompressed, snappy, deflate, bzip2, , xzzstandard Komprese kodeku pro kódování dat Avro
avroSchemaEvolutionMode none, restart Režim vývoje schématu Výchozí hodnota: none. Pokud je nastavená hodnota restart, dotaz vyvolá UnknownFieldException při změně schématu. Restartujte úlohu, aby se použilo nové schéma. Viz Použití režimu vývoje schématu s from_avro.
recursiveFieldMaxDepth Rozsah: -1 do 15 Maximální hloubka rekurze podél jedné rekurzivní cesty. Výchozí hodnota: -1, která neomezuje rekurzivní hloubku.
Pokud je sdílený typ dostupný z mnoha různých cest schématu, rozšíření schématu může způsobit nedostatek paměti ovladače, protože tato možnost je vázaná pouze na jednu cestu. Alternativní řešení:

Příklady

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