Bagikan melalui


Bagaimana varian berbeda dari string JSON?

Penting

Fitur ini ada di Pratinjau Publik.

Artikel ini menjelaskan perubahan perilaku dan perbedaan dalam sintaksis dan semantik saat bekerja dengan jenis data varian. Artikel ini mengasumsikan bahwa Anda terbiasa bekerja dengan data string JSON di Azure Databricks. Untuk pengguna yang baru menggunakan Azure Databricks, Anda harus menggunakan varian daripada string JSON setiap kali menyimpan data semi-terstruktur yang memerlukan fleksibilitas untuk perubahan atau data yang belum diketahui schema. Lihat Model data semi terstruktur.

Di Databricks Runtime 15.3 ke atas, Anda dapat menggunakan jenis data varian untuk mengodekan dan mengkueri data semi terstruktur. Databricks merekomendasikan varian sebagai pengganti untuk menyimpan data semi terstruktur menggunakan string JSON. Peningkatan performa baca dan tulis untuk varian memungkinkannya menggantikan jenis kompleks Spark asli seperti struct dan array dalam beberapa kasus penggunaan.

Bagaimana Anda mengkueri data varian?

Data varian menggunakan operator yang sama untuk mengkueri bidang, subbidang, dan elemen array.

Untuk mengkueri bidang, gunakan :. Contohnya,column_name:field_name.

Untuk mengkueri subbidang, gunakan .. Contohnya,column_name:field_name.subfield_name.

Untuk mengkueri elemen array, gunakan [n]wheren adalah nilai indeks bilangan bulat elemen. Misalnya, untuk mengkueri nilai pertama dalam array, column_name:array_name[0].

Perbedaan berikut mungkin memutus kueri yang ada saat meningkatkan dari string JSON ke varian:

  • Semua elemen jalur varian dicocokkan dengan cara peka huruf besar/kecil. String JSON tidak peka huruf besar/kecil. Ini berarti bahwa untuk varian, column_name:FIELD_NAME dan column_name:field_name cari bidang yang berbeda dalam data yang disimpan.
  • Sintaksis [*] tidak mendukung untuk mengidentifikasi atau membongkah semua elemen dalam array.
  • Varian mengodekan NULLvalues berbeda dari string JSON. Lihat Aturan null varian.
  • Varian columns memiliki batasan untuk beberapa operasi. Lihat Batasan.

Mengonversi string JSON ke dan dari varian

Dalam Databricks Runtime 15.3 ke atas, to_json fungsi ini memiliki fungsionalitas tambahan untuk mentransmisikan VARIANT jenis ke string JSON. Opsi diabaikan saat mengonversi VARIANT ke string JSON. Lihat to_json.

Fungsi mengubah parse_json string JSON menjadi VARIANT jenis. Meskipun parse_json(json_string_column) merupakan inversi logis dari to_json(variant_column), aturan konversi berikut menjelaskan mengapa itu bukan inversi yang tepat:

  • Spasi putih tidak dipertahankan dengan sempurna.
  • Pengurutan kunci segan-segan.
  • Angka nol berikutnya mungkin terpotong.

Fungsi parse_json mengembalikan kesalahan jika string JSON salah bentuk atau melebihi ukuran varian limit. try_parse_json Gunakan fungsi untuk mengembalikan NULL ketika terjadi kesalahan dalam penguraian.

Apa saja fungsi SQL untuk bekerja dengan varian?

Fungsi Apache Spark SQL yang tersedia di Databricks Runtime 15.3 ke atas menyediakan metode untuk berinteraksi dengan data varian. table berikut mencakup fungsi baru, fungsi string JSON yang sesuai, dan mencatat perbedaan perilaku.

Catatan

Untuk menggunakan fungsi ini dengan PySpark DataFrames, impor dari pyspark.sql.functions. variant_explode dan variant_explode_outer tidak didukung di PySpark.

Fungsi varian Fungsi string JSON Catatan
variant_get cast dan get_json_object Mengambil ekspresi, jalur, dan jenis. Mengikuti semua aturan untuk jalur varian, transmisi, dan null.
try_variant_get try_cast dan get_json_object Mengambil ekspresi, jalur, dan jenis. Mengikuti semua aturan untuk jalur varian, transmisi, dan null.
is_variant_null null Memeriksa apakah ekspresi menyimpan yang VARIANT dikodekan NULL. Gunakan is null untuk memeriksa apakah ekspresi input adalah NULL.
schema_of_variant schema_of_json Saat menentukan schema untuk ARRAY<elementType>, elementType mungkin disimpulkan sebagai VARIANT jika ada jenis yang bertentangan yang ditemukan dalam data.
schema_of_variant_agg schema_of_json_agg Ketika jenis yang paling tidak umum diidentifikasi, jenis berasal sebagai VARIANT.
variant_explode meledak Output pos, key, dan valuecolumns. Saat meledakkan array, kunci output selalu null.
variant_explode_outer explode_outer Output pos, key, dan valuecolumns. Saat meledakkan array, kunci output selalu null.

Varian menangani transmisi dan NULLberbeda dari string JSON. Lihat Aturan transmisi jenis varian dan Aturan null varian.