Поделиться через


Функция from_avro

применимо:отмечено «Да» Databricks Runtime 16.0 и более поздние версии

Возвращает значение структуры с использованием avroBin и jsonSchemaStr.

Синтаксис

from_avro(avroBin, jsonSchemaStr [, options] )

Аргументы

  • avroBin BINARY: выражение, указывающее строку данных Avro.
  • avroSchemaSpec: цель schema в формате JSON. Он должен соответствовать schema, закодированному в avroBin, как указано в to_avro().
  • options: необязательный MAP<STRING,STRING> литерал, указывающий директивы.

Возвраты

С STRUCT именами полей и типами на основе результата schema_of_json(jsonStr).

avroBin должен быть хорошо сформирован в отношении avroSchemaSpec и options databricks возникает исключение.

Примечания.

Ниже перечислены наиболее распространенные варианты:

Вариант значение Описание
'mode' 'PERMISSIVE', 'FAILFAST' В режиме PERMISSIVE все поврежденные объекты или поля в объекте setNULL вместо вызова ошибки.
compression 'uncompressed', 'snappy'''deflade, 'bzip2''xz','zstandard' Задает кодек сжатия, используемый для кодирования данных Avro.

Дополнительные сведения см. в разделе "Чтение и запись потоковых данных Avro".

Примеры

> 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}