Função from_avro

Aplica-se a:assinalado com sim Databricks Runtime 16.0 e versões posteriores

Retorna um valor struct com o avroBin e jsonSchemaStr.

Sintaxe

from_avro(avroBin, jsonSchemaStr, options )

Argumentos

  • avroBin: Uma BINARY expressão que especifica uma linha de dados Avro.
  • avroSchemaSpec: O esquema de destino no formato JSON. Deve corresponder ao esquema codificado em avroBin conforme especificado em to_avro().
  • options: Um MAP<STRING,STRING> literal especificando diretivas.

Devoluções

A STRUCT com nomes e tipos de campo com base no resultado de schema_of_json(jsonStr).

avroBin deve estar bem formado com relação ao avroSchemaSpec e options ou o Databricks lançará uma exceção.

Opções

Para uma lista completa de opções, veja Avro.

Opção Valores Descrição
mode FAILFAST, PERMISSIVE Modo de tratamento de erros. Padrão: FAILFAST. No PERMISSIVE modo, os registos corrompidos são definidos como NULL em vez de gerar um erro.
compression uncompressed, snappy, deflate, bzip2, xz, zstandard Codec de compressão para codificar dados Avro.
avroSchemaEvolutionMode none, restart Modo de evolução do esquema. Padrão: none. Quando definido para restart, a consulta lança um UnknownFieldException quando o esquema muda. Reinicia o trabalho para usar o novo esquema. Veja Usar o modo de evolução de esquema com from_avro.
recursiveFieldMaxDepth Alcance: -1 até 15 Profundidade máxima de recursão ao longo de um único caminho recursivo. Padrão: -1, que não limita a profundidade de recursão.
Quando um tipo partilhado é acessível a partir de muitos caminhos de esquema distintos, a expansão do esquema pode fazer com que o driver fique sem memória porque esta opção limita a profundidade apenas num caminho. Para contornar:

Exemplos

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