Função from_avro
Aplica-se a: Databricks SQL Databricks Runtime 15.4 e posterior
Retorna um valor de struct com avroBin
e jsonSchemaStr
.
Sintaxe
from_avro(avroBin, jsonSchemaStr [, options] )
Argumentos
avroBin
: UmaBINARY
expressão que especifica uma linha de dados Avro.avroSchemaSpec
: O esquema de destino no formato JSON. Ele deve corresponder ao esquema codificado conformeavroBin
especificado em to_avro().options
: umaMAP<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).
avroBin
deve 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}