Partilhar via


Função from_avro

Aplica-se a:marca de seleção sim Databricks Runtime 16.0 e posterior

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. Ele deve corresponder ao esquema codificado conforme avroBin especificado em to_avro().
  • options: Um literal opcional MAP<STRING,STRING> especificando diretivas.

Devoluções

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

avroBin deve ser bem formado em relação ao avroSchemaSpec e ou options Databricks levanta uma exceção.

Notas

As seguintes opções são suportadas mais comuns:

Opção valor Description
'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" }');
  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}