適用対象:
Databricks Runtime 16.0 以上
avroBin と jsonSchemaStr を含む構造体の値を返します。
構文
from_avro(avroBin, jsonSchemaStr, options )
引数
-
avroBin: Avro データの行を指定するBINARY式。 -
avroSchemaSpec: JSON 形式のターゲット スキーマ。avroBinで指定されているでエンコードされたスキーマと一致する必要があります。 -
options: ディレクティブを指定するMAP<STRING,STRING>リテラル。
返品
avroBin は、 avroSchemaSpec に関して整形式である必要があり、 options または Databricks によって例外が発生します。
オプション
| オプション | 価値観 | 説明 |
|---|---|---|
mode |
FAILFAST、PERMISSIVE |
エラー処理モード。 既定値: FAILFAST。
PERMISSIVE モードでは、破損したレコードはエラーを発生させる代わりにNULLに設定されます。 |
compression |
uncompressed、 snappy、 deflate、 bzip2、 xz、 zstandard |
Avro データをエンコードするための圧縮コーデック。 |
avroSchemaEvolutionMode |
none、restart |
スキーマの進化モード。 既定値: none。
restartに設定すると、スキーマが変更されたときにクエリによってUnknownFieldExceptionがスローされます。 新しいスキーマを使用するには、ジョブを再起動します。 from_avro でのスキーマ進化モードの使用を参照してください。 |
recursiveFieldMaxDepth |
範囲: -115 |
1 つの再帰パスに沿った最大再帰深度。 既定値: -1。再帰の深さを制限しません。共有型に多数の異なるスキーマ パスから到達できる場合、このオプションでは 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}