Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Fonction
S’applique à :
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
-
avroBinBINARY: expression spécifiant une ligne de données Avro. -
avroSchemaSpec: schéma cible au format JSON. Il doit correspondre au schéma encodéavroBincomme spécifié dans to_avro(). -
options: un littéralMAP<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}