Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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_NAMEdancolumn_name:field_namecari bidang yang berbeda dalam data yang disimpan. - Sintaksis
[*]tidak mendukung untuk mengidentifikasi atau membongkah semua elemen dalam array. - Varian mengodekan
NULLnilai 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. |