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 melalui string JSON setiap kali menyimpan data semi terstruktur yang memerlukan fleksibilitas untuk mengubah atau skema yang tidak diketahui. 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] di mana n 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 NULL nilai secara berbeda dari string JSON. Lihat Aturan null varian.
  • Kolom varian 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 parse_json (SQL atau Python) mengubah 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.

SQL

SELECT parse_json('{"key": 1, "data": [2, 3, "str"]}');

Phyton

spark.range(1).select(parse_json(lit('{"key": 1, "data": [2, 3, "str"]}'))).display()

Fungsi parse_json mengembalikan kesalahan jika string JSON salah bentuk, melebihi batas ukuran varian, atau tidak valid. try_parse_json Gunakan fungsi (SQL atau Python) untuk mengembalikan NULL ketika kesalahan dalam penguraian terjadi.

SQL

SELECT try_parse_json('{"a" : invalid, "b" : 2}');

Phyton

spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()

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. Tabel berikut menyertakan fungsi baru, fungsi string JSON yang sesuai, dan catatan tentang perbedaan perilaku.

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

Catatan

Untuk menggunakan fungsi ini dengan PySpark DataFrames, impor dari pyspark.sql.functions.

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 skema untuk ARRAY<elementType>, elementType mungkin dapat ditafsirkan sebagai VARIANT jika ada jenis yang bertentangan 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 Menghasilkan kolom pos, key, dan value. Saat meledakkan array, kunci output selalu null.
variant_explode_outer explode_outer Menghasilkan kolom pos, key, dan value. Saat meledakkan array, kunci output selalu null.