Apabila menguruskan jadual Hive yang luas yang memerlukan kemas kini biasa, mencari pendekatan yang cekap adalah penting. Peningkatan baru-baru ini pada Hive termasuk keupayaan kemas kini/masukkan/padam, tetapi memilih penyelesaian optimum tetap menjadi cabaran.
Satu kaedah yang berkesan melibatkan penggunaan FULL OUTER JOIN untuk menggabungkan data kemas kini tambahan dengan jadual utama sedia ada. Dengan menyertai kunci utama, ia mengenal pasti kedua-dua entri yang dikemas kini dan baharu. Pertanyaan di bawah menunjukkan pendekatan ini:
INSERT OVERWRITE target_data [partition()] SELECT -- Select new if exists, old if not exists CASE WHEN i.PK IS NOT NULL THEN i.PK ELSE t.PK END AS PK, CASE WHEN i.PK IS NOT NULL THEN i.COL1 ELSE t.COL1 END AS COL1, ... CASE WHEN i.PK IS NOT NULL THEN i.COL_n ELSE t.COL_n END AS COL_n FROM target_data t -- Restrict partitions if applicable FULL JOIN increment_data i ON (t.PK = i.PK);
Pengoptimuman boleh digunakan untuk meningkatkan prestasi, seperti mengehadkan partition dalam jadual sasaran yang akan ditimpa. Melepasi senarai partition sebagai parameter boleh mempercepatkan proses dengan ketara.
Jika kemas kini tambahan memerlukan mengemas kini semua lajur dengan data baharu, operasi UNION ALL dengan row_number() boleh digunakan sebagai alternatif kepada FULL OUTER JOIN. Pendekatan ini selalunya menawarkan prestasi yang lebih baik:
SELECT PK, COL1, ... COL_N FROM target_data UNION ALL SELECT PK, COL1, ... COL_N FROM increment_data;
Fungsi tetingkap row_number() memberikan nombor unik pada setiap baris, membenarkan pertanyaan mengenal pasti dan mengutamakan rekod kemas kini.
Atas ialah kandungan terperinci Bagaimana Mengemas kini Jadual Sarang Besar dengan Cekap Secara Berperingkat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!