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.
Artikel ini merekomendasikan pola untuk menyimpan data semi-terstruktur tergantung pada cara organisasi Anda menggunakan data. Azure Databricks menyediakan fungsi, jenis data asli, dan sintaks kueri untuk bekerja dengan data semi terstruktur, berlapis, dan kompleks.
Pertimbangan berikut memengaruhi pola mana yang harus Anda gunakan:
- Apakah bidang atau jenis di sumber data sering berubah?
- Berapa banyak total bidang unik yang terkandung dalam sumber data?
- Apakah Anda perlu mengoptimalkan beban kerja Anda untuk menulis atau membaca?
Tabel berikut merangkum pendekatan yang tersedia. Pola apa pun yang Anda pilih, Databricks merekomendasikan menyimpan data sebagai tabel Delta untuk kueri selanjutnya.
| Approach | Paling cocok untuk | Penanganan skema | Performance |
|---|---|---|---|
| Varian | JSON semi-terstruktur yang mendapat manfaat dari penyimpanan yang dioptimalkan | Fleksibel, dengan aplikasi serupa dengan string JSON | Pengkodean yang dioptimalkan yang mengungguli string JSON saat membaca dan menulis |
| String JSON | Menangkap representasi lengkap dan akurat dari data sumber mentah | Tidak ada informasi tipe dan tidak memerlukan pemrosesan awal | Paling lambat saat dibaca, karena seluruh string diurai untuk setiap kueri |
| Struktur | Data dengan skema yang sudah dikenal di mana Anda ingin data yang divalidasi | Dipaksakan untuk menulis; memerlukan pra-pemrosesan; kurang fleksibel untuk evolusi skema | Paling baik untuk pembacaan, tetapi kinerjanya menurun setelah mencapai ratusan kolom |
| Peta dan array | Dataset semi-terstruktur dengan sekitar 500 bidang | Kunci dan nilai diketik dan ditegakkan saat menulis | Seimbang saat membaca dan menulis, tapi statistik tidak bisa dikumpulkan |
Gunakan varian
Dalam Databricks Runtime 15.3 dan yang lebih baru, Anda dapat menggunakan tipe VARIANT untuk menyimpan data JSON semi-terstruktur dengan pengodean yang dioptimalkan, yang memberikan performa lebih baik daripada string JSON untuk operasi baca dan tulis.
Jenis ini VARIANT memiliki aplikasi serupa sebagai string JSON. Beberapa beban kerja masih mendapat manfaat dari penggunaan struktur, peta, dan array, terutama untuk data dengan skema terkenal yang akan mendapat manfaat dari tata letak data dan pengumpulan statistik yang dioptimalkan.
Untuk detail selengkapnya, lihat artikel berikut ini:
- Data varian kueri
- Bagaimana varian berbeda dari string JSON?
- Menyerap data sebagai jenis varian semi-terstruktur
Menggunakan string JSON
Anda dapat menyimpan data dalam satu kolom string menggunakan pemformatan JSON standar lalu mengkueri bidang di JSON menggunakan : notasi.
Banyak sistem menghasilkan rekaman sebagai string atau rekaman JSON yang dikodekan byte. Memasukkan dan menyimpan rekod ini dalam bentuk string memiliki overhead pemrosesan yang sangat rendah. Anda juga dapat menggunakan to_json fungsi untuk mengubah struktur data apa pun menjadi string JSON.
Pertimbangkan kekuatan dan kelemahan berikut saat memilih untuk menyimpan data sebagai string JSON:
- Semua nilai disimpan sebagai string tanpa informasi jenis.
- JSON mendukung semua jenis data yang dapat diwakili menggunakan teks.
- JSON mendukung string dengan panjang berapa pun.
- Tidak ada batasan jumlah bidang yang dapat diwakili dalam satu kolom data JSON.
- Data tidak memerlukan pra-pemrosesan sebelum menulis ke tabel.
- Anda dapat mengatasi masalah tipe data dalam beban kerja downstream.
- JSON memberikan performa terburuk saat dibaca, karena Anda harus mengurai seluruh string untuk setiap kueri.
String JSON memberikan fleksibilitas yang besar dan solusi yang mudah diimplementasikan untuk mendapatkan data mentah ke dalam tabel lakehouse. Anda mungkin memilih untuk menggunakan string JSON untuk banyak aplikasi, tetapi sangat berguna ketika hasil beban kerja yang paling penting adalah menyimpan representasi sumber data yang lengkap dan akurat untuk pemrosesan hilir. Beberapa kasus penggunaan mungkin meliputi:
- Menyerap data streaming dari layanan antrean seperti Kafka.
- Merekam respons terhadap kueri REST API.
- Menyimpan catatan mentah dari sumber data upstream yang tidak berada di bawah kendali tim Anda.
Dengan asumsi logika pemasukan data Anda fleksibel, menyimpan data sebagai string JSON akan tetap andal bahkan jika Anda menghadapi bidang baru, perubahan pada struktur data, atau perubahan tipe data pada sumber data. Meskipun beban kerja hilir mungkin gagal karena perubahan ini, tabel Anda berisi riwayat lengkap data sumber, yang berarti Anda dapat memulihkan masalah tanpa perlu kembali ke sumber data.
Gunakan struct
Anda dapat menyimpan data semi-terstruktur dengan struktur dan mengaktifkan semua fungsionalitas asli kolom sambil mempertahankan struktur berlapis sumber data.
Delta Lake memungkinkan Anda menggunakan struktur dengan cara yang sama seperti kolom. Dalam tabel Delta Lake, file data Parquet membuat kolom untuk setiap bidang dalam struct. Anda dapat menggunakan bidang struct sebagai kunci pengklusteran, dan Anda dapat mengumpulkan statistik pada struktur untuk melewatkan data. Anda tidak dapat mempartisi tabel menurut bidang struct. Gunakan pengklusteran cair sebagai gantinya. Lihat Menggunakan pengklusteran cair untuk tabel.
Struktur umumnya memberikan performa terbaik saat dibaca, karena mendukung semua pengoptimalan lompati data dan menyimpan bidang individual sebagai kolom. Performa dapat mulai terpengaruh ketika jumlah kolom yang ada mencapai ratusan.
Setiap bidang dalam struktur memiliki jenis data, yang diterapkan saat penulisan sama seperti pada kolom. Dengan demikian, struktur memerlukan pra-pemrosesan data penuh. Ini dapat bermanfaat ketika Anda hanya ingin data tervalidasi diterapkan ke tabel, tetapi dapat menyebabkan data yang hilang atau gagalnya pemrosesan saat memproses rekaman cacat dari sistem hulu.
Struktur kurang fleksibel daripada aliran JSON untuk evolusi skema, apakah ini untuk mengembangkan jenis data atau menambahkan bidang baru.
Menggunakan peta dan array
Anda dapat menggunakan kombinasi peta dan array untuk mereplikasi format data semi terstruktur secara asli di Delta Lake. Statistik tidak dapat dikumpulkan pada bidang yang ditentukan dengan jenis ini, tetapi memberikan performa seimbang pada baca dan tulis untuk himpunan data semi terstruktur yang memiliki sekitar 500 bidang.
Kunci dan nilai peta diketik, sehingga data diproses sebelumnya dan skema diberlakukan saat menulis.
Untuk mempercepat kueri, Databricks merekomendasikan penyimpanan bidang yang sering digunakan untuk memfilter data sebagai kolom terpisah.
Apakah saya perlu meratakan data saya?
Jika Anda menyimpan data menggunakan JSON atau peta, pertimbangkan untuk menyimpan bidang yang sering digunakan untuk memfilter kueri sebagai kolom. Pengumpulan statistik, partisi, dan pengklusteran tidak tersedia untuk bidang dalam string atau peta JSON. Anda tidak perlu melakukan ini untuk data yang disimpan sebagai struct.
Sintaks untuk bekerja dengan data berlapis
Tinjau sumber daya berikut untuk informasi tentang bekerja dengan data berlapis: