>Java >java지도 시간 >대규모 Hive 테이블을 증분식으로 효율적으로 업데이트하는 방법은 무엇입니까?

대규모 Hive 테이블을 증분식으로 효율적으로 업데이트하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-14 19:52:02833검색

How to Efficiently Update a Large Hive Table Incrementally?

Hive: 메인 테이블의 효율적인 증분 업데이트

정기적인 업데이트가 필요한 방대한 Hive 테이블을 관리할 때 효율적인 접근 방식 찾기 결정적이다. 최근 Hive의 향상된 기능에는 업데이트/삽입/삭제 기능이 포함되어 있지만 최적의 솔루션을 선택하는 것은 여전히 ​​어려운 일입니다.

증분 업데이트에 전체 OUTER JOIN 사용

One 효과적인 방법은 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.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);

덮어쓸 대상 테이블의 파티션을 제한하는 등 성능 향상을 위해 최적화를 적용할 수 있습니다. 파티션 목록을 매개변수로 전달하면 프로세스 속도가 크게 향상될 수 있습니다.

열 수준 업데이트의 경우 UNION ALL row_number()를 고려하세요

증분 업데이트에 필요한 경우 모든 열을 새 데이터로 업데이트하는 경우 FULL OUTER JOIN 대신 row_number()를 사용한 UNION ALL 작업을 사용할 수 있습니다. 이 접근 방식은 종종 향상된 성능을 제공합니다.

SELECT
  PK,
  COL1,
  ...
  COL_N
FROM
  target_data
UNION ALL
SELECT
  PK,
  COL1,
  ...
  COL_N
FROM
  increment_data;

row_number() 창 함수는 각 행에 고유 번호를 할당하여 쿼리가 업데이트 레코드를 식별하고 우선 순위를 지정할 수 있도록 합니다.

위 내용은 대규모 Hive 테이블을 증분식으로 효율적으로 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.