Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция
Область применения:
Databricks Runtime 16.0 и более поздней версии
Возвращает значение структуры с использованием avroBin и jsonSchemaStr.
Синтаксис
from_avro(avroBin, jsonSchemaStr, options )
Аргументы
-
avroBinBINARY: выражение, указывающее строку данных Avro. -
avroSchemaSpec: целевая схема в формате JSON. Он должен соответствовать схеме, закодированной вavroBin, как указано в to_avro(). -
options: литералMAP<STRING,STRING>, задающий директивы.
Возвраты
Объект STRUCT с именами полей и типами, основанными на результате schema_of_json(jsonStr).
avroBin должен быть корректно сформирован в отношении avroSchemaSpec и options, иначе Databricks выдаст исключение.
Опции
Полный список параметров см. в разделе Avro.
| Вариант | Ценности | Описание |
|---|---|---|
mode |
FAILFAST, PERMISSIVE |
Режим обработки ошибок. По умолчанию: FAILFAST. В PERMISSIVE режиме поврежденные записи задаются вместо того, чтобы NULL вызывать ошибку. |
compression |
uncompressed, , snappydeflatebzip2xz,zstandard |
Кодек сжатия для кодирования данных Avro. |
avroSchemaEvolutionMode |
none, restart |
Режим эволюции схемы. По умолчанию: none. Если задано значение restart, запрос создает исключение UnknownFieldException при изменении схемы. Перезапустите задание, чтобы использовать новую схему. См. раздел "Использование режима эволюции схемы" с from_avro. |
recursiveFieldMaxDepth |
Диапазон: -1 до 15 |
Максимальная глубина рекурсии вдоль одного рекурсивного пути. Значение по умолчанию: -1не ограничивает глубину рекурсии.Если общий тип доступен из многих разных путей схемы, расширение схемы может привести к нехватке памяти драйвера, так как этот параметр ограничивает глубину только одного пути. Для обходного решения:
|
Примеры
> 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}