Función from_avro

Se aplica a:marcado con sí Databricks Runtime 16.0 y versiones posteriores

Devuelve un valor de estructura con avroBin y jsonSchemaStr.

Sintaxis

from_avro(avroBin, jsonSchemaStr, options )

Argumentos

  • avroBin BINARY: expresión que especifica una fila de datos de Avro.
  • avroSchemaSpec: el esquema de destino en formato JSON. Debe coincidir con el esquema codificado en avroBin como se especifica en to_avro()..
  • options: un literal MAP<STRING,STRING> que especifica directivas.

Devoluciones

Un STRUCT con nombres de campo y tipos basados en el resultado de schema_of_json(jsonStr).

avroBin debe tener un formato correcto con respecto a avroSchemaSpec y options o Databricks genera una excepción.

Opciones

Opción Valores Descripción
mode FAILFAST, PERMISSIVE Modo de control de errores. Valor predeterminado: FAILFAST. En PERMISSIVE el modo , los registros dañados se establecen NULL en en lugar de generar un error.
compression uncompressed, snappy, deflate, bzip2, , xz, zstandard Códec de compresión para codificar datos avro.
avroSchemaEvolutionMode none, restart Modo de evolución del esquema. Valor predeterminado: none. Cuando se establece en restart, la consulta produce una UnknownFieldException excepción cuando cambia el esquema. Reinicie el trabajo para usar el nuevo esquema. Consulte Uso del modo de evolución del esquema con from_avro.
recursiveFieldMaxDepth Intervalo: -1 a 15 Profundidad máxima de recursión a lo largo de una única ruta recursiva. Valor predeterminado: -1, que no limita la profundidad de recursividad.
Cuando se puede acceder a un tipo compartido desde muchas rutas de acceso de esquema distintas, la expansión del esquema podría hacer que el controlador se queda sin memoria porque esta opción limita la profundidad solo en una ruta de acceso. Para solucionar el problema:

Ejemplos

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