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
dancolumn_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
values 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 value columns. Saat meledakkan array, kunci output selalu null. |
variant_explode_outer | explode_outer | Output pos , key , dan value columns. Saat meledakkan array, kunci output selalu null. |
Varian menangani transmisi dan NULL
berbeda dari string JSON. Lihat Aturan transmisi jenis varian dan Aturan null varian.