from_avro 関数

適用対象:「はい」がチェックされた Databricks Runtime 16.0 以上

avroBinjsonSchemaStr を含む構造体の値を返します。

構文

from_avro(avroBin, jsonSchemaStr, options )

引数

  • avroBin: Avro データの行を指定する BINARY 式。
  • avroSchemaSpec: JSON 形式のターゲット スキーマ。 avroBinで指定されているでエンコードされたスキーマと一致する必要があります。
  • options: ディレクティブを指定する MAP<STRING,STRING> リテラル。

返品

STRUCTの結果に基づくフィールド名と型を持つ

avroBin は、 avroSchemaSpec に関して整形式である必要があり、 options または Databricks によって例外が発生します。

オプション

オプション 価値観 説明
mode FAILFASTPERMISSIVE エラー処理モード。 既定値: FAILFASTPERMISSIVE モードでは、破損したレコードはエラーを発生させる代わりにNULLに設定されます。
compression uncompressedsnappydeflatebzip2xzzstandard Avro データをエンコードするための圧縮コーデック。
avroSchemaEvolutionMode nonerestart スキーマの進化モード。 既定値: nonerestartに設定すると、スキーマが変更されたときにクエリによって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}