Compartilhar via


Função from_avro

Aplica-se a:verificação marcada como sim Databricks Runtime 16.0 e superior

Retorna um valor de struct com 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 literal MAP<STRING,STRING> que especifica diretivas.

Devoluções

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

avroBindeve ser bem formado em relação ao e avroSchemaSpec ou o options Databricks gera uma exceção.

Observações

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

Opção Valor Descrição
'mode' 'PERMISSIVE', 'FAILFAST' No modo PERMISSIVE, qualquer objeto ou campo corrompido em um objeto é configurado para 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 mais opções, confira Leitura e gravação de dados de streaming Avro.

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}