Fonction from_avro

S’applique à :check marqué oui Databricks Runtime 16.0 et versions ultérieures

Retourne une valeur de struct avec avroBin et jsonSchemaStr.

Syntaxe

from_avro(avroBin, jsonSchemaStr, options )

Les arguments

  • avroBin BINARY: expression spécifiant une ligne de données Avro.
  • avroSchemaSpec: schéma cible au format JSON. Il doit correspondre au schéma encodé avroBin comme spécifié dans to_avro().
  • options: un littéral MAP<STRING,STRING> qui spécifie des directives.

Retours

Avec STRUCT des noms de champs et des types basés sur le résultat de schema_of_json(jsonStr).

avroBin doit être bien formé en ce qui concerne l’exception avroSchemaSpec et options ou Databricks.

Paramètres

Choix Valeurs Descriptif
mode FAILFAST, PERMISSIVE Mode de gestion des erreurs. Valeur par défaut : FAILFAST. En PERMISSIVE mode, les enregistrements endommagés sont définis sur la NULL valeur au lieu de déclencher une erreur.
compression uncompressed, , snappy, deflatebzip2, , xzzstandard Codec de compression pour l’encodage des données Avro.
avroSchemaEvolutionMode none, restart Mode d’évolution du schéma. Valeur par défaut : none. Lorsque la valeur est définie restart, la requête lève une UnknownFieldException fois le schéma modifié. Redémarrez le travail pour utiliser le nouveau schéma. Consultez Utiliser le mode d’évolution du schéma avec from_avro.
recursiveFieldMaxDepth Plage : -1 à 15 Profondeur de récursivité maximale le long d’un chemin récursif unique. Valeur par défaut : -1, qui ne limite pas la profondeur de récursivité.
Lorsqu’un type partagé est accessible à partir de nombreux chemins de schéma distincts, l’extension du schéma peut entraîner l’expiration de la mémoire du pilote, car cette option limite la profondeur d’un seul chemin. Pour contourner les problèmes suivants :

Exemples

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