Partilhar via


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.

Notas

As opções mais comumente suportadas são:

Opção valor Descrição
'mode' 'PERMISSIVE', 'FAILFAST' No PERMISSIVE modo, quaisquer objetos ou campos corrompidos em um objeto são definidos como NULL em vez de gerar um erro.
compression 'uncompressed', 'snappy', 'deflade«, 'bzip2', 'xz', 'zstandard' Especifica o codec de compactação usado para codificar os dados Avro.

Para obter mais opções, consulte Ler e gravar dados Avro de streaming.

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}