Partager via


Fonction from_avro

S’applique à : coche pour oui Databricks SQL case marquée oui Databricks Runtime 15.4 et versions ultérieures

Retourne une valeur de struct avec avroBin et jsonSchemaStr.

Syntaxe

from_avro(avroBin, jsonSchemaStr [, options] )

Arguments

  • avroBinBINARY: 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 MAP<STRING,STRING> littéral optionnel spécifiant les 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.

Notes

Les options suivantes sont les plus courantes prises en charge :

Option Valeur Description
'mode' 'PERMISSIVE', 'FAILFAST' En PERMISSIVE mode, tous les objets ou champs endommagés d’un objet sont définis NULL à la place d’une erreur.
compression 'uncompressed', 'snappy'' , 'deflade', 'bzip2', 'xz', 'zstandard' Spécifie le codec de compression utilisé pour encoder les données Avro.

Pour plus d’options, consultez Lire et écrire des données Avro en continu.

Exemples

> SELECT from_avro(to_avro(5), '{ "type" : "int" }');
  5

> SELECT from_avro(to_avro(5, '{ "type" : "int" }'), '{ "type" : "int" }');
  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"}]}');
  {"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}