Rumah  >  Artikel  >  Java  >  Bagaimana Mengemas kini Jadual Sarang Besar dengan Cekap Secara Berperingkat?

Bagaimana Mengemas kini Jadual Sarang Besar dengan Cekap Secara Berperingkat?

DDD
DDDasal
2024-11-17 03:41:03986semak imbas

How to Efficiently Update Large Hive Tables Incrementally?

Hive: Kemas Kini Bertambah Cekap untuk Jadual Utama

Tinjauan Keseluruhan Masalah

Menyelenggarakan meja utama yang besar dalam Hive memerlukan strategi untuk mengendalikan kemas kini data tambahan dengan cekap. Cabarannya terletak pada mengimbangi kelajuan dan ketepatan apabila mengurus kedua-dua data baharu dan dikemas kini.

Pendekatan

Pendekatan 1: Padam dan Sisipkan

  • Cari entri yang dikemas kini dan alih keluarnya daripada jadual utama.
  • Masukkan data tambahan baharu.

Kebaikan: Sisipan pantas
Keburukan: Pemadaman perlahan

Pendekatan 2: Kenyataan Kemas Kini

  • Gunakan pernyataan KEMASKINI untuk memadankan nilai utama dan mengemas kini medan tertentu.

Kebaikan: Kemas kini yang tepat
Keburukan: Sangat lambat disebabkan oleh逐条更新。

Penyelesaian Dioptimumkan

Jika mod ACID tidak tersedia, gabungan FULL OUTER JOIN atau UNION ALL dan row_number() menyediakan penyelesaian yang cekap:

Pertanyaan 1 (FULL OUTER JOIN):

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.PK   else t.PK   end as PK,
  ...
  case when i.PK is not null then i.COL_n else t.COL_n end as COL_n
FROM
    target_data t
    FULL JOIN increment_data i on (t.PK=i.PK);

Pertanyaan 2 (UNION ALL):

INSERT OVERWRITE TABLE target_data
SELECT * FROM incremental_data
UNION ALL
SELECT * FROM target_data
WHERE
    NOT (PK IN (SELECT PK FROM incremental_data));

Petua

  • Hadkan partition dalam operasi JOIN/UNION untuk pelaksanaan yang lebih pantas.
  • Pertimbangkan untuk menggunakan UNION ALL jika semua lajur perlu dikemas kini dengan data baharu.

Faedah Penyelesaian Dioptimumkan

  • Kemas kini yang pantas dan cekap
  • Mengendalikan kedua-dua data baharu dan dikemas kini dengan tepat
  • Boleh diskalakan untuk set data yang besar

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn