from_avro 函数

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 15.4 及更高版本

返回具有 avroBinjsonSchemaStr 的结构值。

语法

from_avro(avroBin, jsonSchemaStr [, options] )

参数

  • avroBin:指定 Avro 数据行的 BINARY 表达式。
  • avroSchemaSpec:JSON 格式中的目标架构。 它必须与 to_avro() 中指定的 avroBin 中编码的架构匹配。
  • options:指定指令的可选MAP<STRING,STRING>文本。

返回

基于 schema_of_json(jsonStr) 结果的字段名称和类型的 STRUCT

avroBin 必须相对于 avroSchemaSpecoptions 格式标准,否则 Databricks 会引发异常。

备注

以下选项是最常见的支持选项:

选项 说明
'mode' 'PERMISSIVE', 'FAILFAST' PERMISSIVE 模式下,对象中的任何损坏对象或字段都将设置为 NULL,而不是引发错误。
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}