Compartilhar via


Função from_avro

Aplica-se a: marca de seleção positiva Databricks SQL marca de seleção positiva Databricks Runtime 15.4 e posterior

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

Devoluções

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

avroBindeve ser bem formado em relação ao e options ou o avroSchemaSpec 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 PERMISSIVE modo, todos os 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 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}