Dalam gudang Hive, adalah penting untuk mengekalkan data terkini dalam jadual pusat, terutamanya dengan skala besar yang kerap kemas kini. Untuk menangani cabaran ini, terdapat dua pendekatan utama:
Kaedah ini bertujuan untuk mengenal pasti dan mengalih keluar masukan lapuk daripada jadual utama dan kemudian memasukkan tambahan baharu data. Walaupun sisipan adalah cekap, proses pemadaman boleh memakan masa.
Menggunakan pernyataan Hive UPDATE, anda boleh mengubah suai entri sedia ada berdasarkan kunci yang sepadan nilai. Walau bagaimanapun, pendekatan ini mempunyai kelemahan pemprosesan yang berpotensi lebih perlahan kerana keperluan untuk mengemas kini setiap entri secara individu.
Untuk meningkatkan prestasi, alternatif yang lebih cekap ialah menggunakan JOIN LUAR PENUH antara data kenaikan dan jadual utama:
insert overwrite target_data [partition() if applicable] 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);
Dengan membahagikan data sasaran dan menggunakan penapis partition, operasi cantuman boleh dioptimumkan lagi untuk memfokuskan pada partition yang terjejas sahaja.
Untuk kes di mana semua lajur perlu dikemas kini dengan data baharu , gabungan UNION ALL dan penomboran baris boleh digunakan, yang lebih pantas daripada FULL OUTER JOIN kaedah:
SELECT PK, COL1, ... COL_n, row_number() OVER (PARTITION BY PK ORDER BY PK) as rownum FROM ( SELECT * FROM target_data UNION ALL SELECT * FROM increment_data ) GROUP BY PK, COL1, ..., COL_n
Teknik ini memberikan nombor baris unik kepada setiap baris dalam set hasil gabungan, membenarkan pengenalan baris yang perlu dikemas kini:
DELETE FROM target_data WHERE EXISTS ( SELECT 1 FROM combined_data WHERE combined_data.PK = target_data.PK AND combined_data.rownum > 1 )
INSERT OVERWRITE INTO target_data SELECT * FROM combined_data WHERE combined_data.rownum = 1
Menggunakan teknik yang dioptimumkan ini boleh meningkatkan prestasi kemas kini tambahan dalam Hive dengan ketara, memastikan pengurusan data yang cekap dan ketersediaan tepat pada masanya maklumat terkini.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengemas kini data dengan cekap dalam Jadual Utama Hive apabila berurusan dengan kemas kini berskala besar yang kerap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!