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?
Databricks merekomendasikan penyimpanan data sebagai tabel Delta untuk kueri hilir.
Gunakan varian
Dalam Databricks Runtime 15.3 ke atas, Anda dapat menggunakan VARIANT jenis untuk menyimpan data JSON semi terstruktur menggunakan pengodean yang dioptimalkan yang mengungguli string JSON untuk 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. Menyerap dan menyimpan rekaman ini karena 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 panjang arbitrer.
- 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 jenis yang ada dalam data dalam beban kerja hilir.
- 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 kueri REST API.
- Menyimpan rekaman mentah dari sumber data upstram yang tidak dikontrol oleh tim Anda.
Dengan asumsi logika penyerapan Anda fleksibel, menyimpan data sebagai string JSON harus tangguh bahkan jika Anda menemukan bidang baru, perubahan struktur data, atau mengetik perubahan di 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.
Menggunakan structs
Anda dapat menyimpan data semi-terstruktur dengan struktur dan mengaktifkan semua fungsionalitas asli kolom sambil mempertahankan struktur berlapis sumber data.
Delta Lake memperlakukan data yang disimpan sebagai struktur yang sama dengan kolom lain, yang berarti bahwa tidak ada perbedaan fungsional dari struktur dan kolom. File data Parquet yang digunakan oleh Delta Lake membuat kolom untuk setiap bidang dalam struct. Anda dapat menggunakan bidang struct sebagai kolom pengklusteran atau kolom partisi, dan Anda dapat mengumpulkan statistik tentang struktur untuk melewatkan data.
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: