from_json fungsi

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Mengembalikan nilai struct dengan jsonStr dan schema.

Sintaks

from_json(jsonStr, schema [, options])

Argumen

  • jsonStr: Ekspresi STRING yang menentukan dokumen json.
  • schema: Ekspresi STRING atau pemanggilan schema_of_json fungsi.
  • options: Arahan penentuan harfiah opsional MAP<STRING,STRING> .

jsonStr harus terbentuk dengan baik sehubungan dengan schema dan options.

schema harus didefinisikan sebagai nama kolom dan pasangan jenis data yang dipisahkan koma, mirip dengan format yang digunakan dalam CREATE TABLE. Sebelum Databricks Runtime 12.2 schema harus berupa nilai literal.

Atau, Anda dapat menggunakan from_json dengan Alur Deklaratif Lakeflow Spark untuk secara otomatis menyimpulkan dan mengembangkan skema dengan mengatur schema ke NULL dan menentukan schemaLocationKey. Misalnya, lihat Menyimpulkan dan mengembangkan skema menggunakan from_json dalam alur.

Catatan

Nama kolom dan field di schema peka huruf besar/kecil dan harus persis sama dengan nama di jsonStr. Untuk memetakan bidang JSON yang hanya berbeda jika, Anda dapat mentransmisikan struktur yang dihasilkan ke nama bidang yang berbeda. Lihat Contoh untuk detail selengkapnya.

options, jika tersedia, dapat berupa salah satu dari berikut ini:

  • primitivesAsString (falsedefault ): menyimpulkan semua nilai primitif sebagai jenis string.
  • prefersDecimal (falsedefault ): menyimpulkan semua nilai floating-point sebagai jenis desimal. Jika nilai tidak pas dalam desimal, maka dianggap sebagai double.
  • allowComments (false default): mengabaikan komentar gaya Java dan C++ dalam rekaman JSON.
  • allowUnquotedFieldNames (default false): memungkinkan nama bidang JSON yang tidak menggunakan tanda kutip.
  • allowSingleQuotes (default true): memungkinkan tanda kutip tunggal di samping tanda kutip ganda.
  • allowNumericLeadingZeros (default false): memungkinkan angka nol di depan (misalnya, 00012).
  • allowBackslashEscapingAnyCharacter (default false): memungkinkan pengutipan semua karakter menggunakan mekanisme pengutipan backslash.
  • allowUnquotedControlChars (default false): memungkinkan String JSON berisi karakter kontrol yang tidak dikutip (karakter ASCII dengan nilai kurang dari 32, termasuk karakter umpan tab dan baris) atau tidak.
  • mode (default PERMISSIVE): memungkinkan mode untuk menangani catatan yang rusak selama penguraian.
    • PERMISSIVE: ketika menemukan catatan yang rusak, menempatkan string rusak ke dalam bidang yang dikonfigurasi oleh columnNameOfCorruptRecord, dan menyetel bidang yang rusak ke kosong. Untuk menyimpan rekaman yang rusak, Anda dapat mengatur bidang jenis string bernama columnNameOfCorruptRecord dalam skema yang ditentukan pengguna. Jika skema tidak memiliki bidang, skema akan mengabaikan rekaman yang rusak selama penguraian. Saat menyimpulkan skema, secara implisit menambahkan bidang columnNameOfCorruptRecord dalam skema output.
    • FAILFAST: melempar pengecualian saat menemukan catatan yang rusak.
  • columnNameOfCorruptRecord (defaultnya adalah nilai yang ditentukan dalam spark.sql.columnNameOfCorruptRecord): memungkinkan penggantian nama bidang baru yang memiliki string cacat yang dibuat oleh mode PERMISSIVE. Ini menggantikan spark.sql.columnNameOfCorruptRecord.
  • dateFormat (default yyyy-MM-dd): mengatur string yang menunjukkan format tanggal. Format tanggal kustom mengikuti format pada pola Tanggalwaktu. Ini berlaku untuk jenis tanggal.
  • timestampFormat (default yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): menetapkan string yang menunjukkan format penanda waktu. Format tanggal kustom mengikuti format pada pola Tanggalwaktu. Ini berlaku untuk jenis stempel waktu.
  • multiLine (default false): mengurai satu rekaman, yang dapat menjangkau beberapa baris, per file.
  • encoding (secara default tidak diatur): memungkinkan untuk secara paksa mengatur salah satu pengodean dasar atau diperluas standar untuk file JSON. Misalnya UTF-16BE, UTF-32LE. Jika pengodean tidak ditentukan dan multiLine diatur menjadi true, pengodean akan terdeteksi secara otomatis.
  • lineSep (default mencakup semua \r, \r\n, dan \n): menentukan pemisah garis yang harus digunakan untuk penguraian.
  • samplingRatio (default 1.0): menentukan sebagian kecil objek JSON input yang digunakan untuk inferensi skema.
  • dropFieldIfAllNull (falsedefault ): apakah akan mengabaikan kolom semua nilai null atau array/struct kosong selama inferensi skema.
  • locale (default en-US): sets menentukan lokal sebagai penanda bahasa dalam format IETF BCP 47. Misalnya, ini digunakan saat mengurai tanggal dan stempel waktu.
  • allowNonNumericNumbers (truedefault ): memungkinkan pengurai JSON mengenali sekumpulan token bukan angka (NaN) sebagai nilai angka mengambang legal:
    • +INF untuk tak terhingga positif, serta alias +Infinity dan Infinity.
    • -INF untuk tak terhingga negatif, alias -Infinity.
    • NaN untuk nilai bukan-bilangan lainnya, seperti hasil pembagian dengan nol.
  • readerCaseSensitive (default true): menentukan perilaku sensitivitas kasus saat rescuedDataColumn diaktifkan. Jika benar, selamatkan kolom data yang namanya berbeda dalam hal huruf besar/kecil dari skema; jika tidak, baca data dengan cara yang tidak peka terhadap huruf besar/kecil. Tersedia di Databricks SQL dan Databricks Runtime 13.3 LTS ke atas.

Pengembalian

Struktur dengan nama bidang dan jenis yang cocok dengan definisi skema.

Saat opsi mode diatur ke FAILFAST, Azure Databricks menaikkan MALFORMED_RECORD_IN_PARSING jika input tidak sesuai dengan skema.

Kondisi kesalahan umum

Contoh

> SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');
{"a":1,"b":0.8}

-- The column name must to match the case of the JSON field
> SELECT from_json('{"a":1}', 'A INT');
{"A":null}

> SELECT from_json('{"datetime":"26/08/2015"}', 'datetime Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{"datetime":2015-08-26 00:00:00}

-- Disambiguate field names with different cases
> SELECT cast(from_json('{"a":1, "A":0.8}', 'a INT, A DOUBLE') AS STRUCT<a: INT, b: DOUBLE>);
 {"a":1, "b":0.8}

> SELECT from_json('invalid', 'a INT', map('mode', 'FAILFAST'));
  Error: MALFORMED_RECORD_IN_PARSING