from_avro fungsi

Berlaku untuk:ditandai sebagai 'ya' Databricks Runtime 16.0 dan versi yang lebih baru

Menghasilkan nilai struktur dengan avroBin dan jsonSchemaStr.

Sintaks

from_avro(avroBin, jsonSchemaStr, options )

Argumen

  • avroBin BINARY: Ekspresi yang menentukan baris data Avro.
  • avroSchemaSpec: Skema target dalam format JSON. Ini harus cocok dengan skema yang dikodekan dalam avroBin seperti yang ditentukan dalam to_avro().
  • options: MAP<STRING,STRING> harfiah yang menentukan arahan.

Pengembalian Barang

STRUCT dengan nama dan jenis bidang berdasarkan hasil schema_of_json(jsonStr).

avroBin harus terbentuk dengan baik dalam kaitannya dengan avroSchemaSpec dan options atau Databricks mengeluarkan pengecualian.

Opsi

Opsi Nilai Deskripsi
mode FAILFAST, PERMISSIVE Mode penanganan kesalahan. Standar: FAILFAST. Dalam PERMISSIVE mode, rekaman yang rusak diatur ke NULL alih-alih meningkatkan kesalahan.
compression uncompressed, , snappydeflate, bzip2, , xz,zstandard Kodek kompresi untuk mengodekan data Avro.
avroSchemaEvolutionMode none, restart Mode evolusi skema. Standar: none. Saat diatur ke restart, kueri melempar UnknownFieldException saat skema berubah. Mulai ulang pekerjaan untuk menggunakan skema baru. Lihat Menggunakan mode evolusi skema dengan from_avro.
recursiveFieldMaxDepth Rentang: -1 ke 15 Kedalaman rekursi maksimum di sepanjang satu jalur rekursif. Default: -1, yang tidak membatasi kedalaman rekursi.
Ketika jenis bersama dapat dijangkau dari banyak jalur skema yang berbeda, ekspansi skema dapat menyebabkan driver kehabisan memori karena opsi ini mengikat kedalaman pada satu jalur saja. Untuk solusinya:

Contoh

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