정기적인 업데이트가 필요한 방대한 Hive 테이블을 관리할 때 효율적인 접근 방식 찾기 결정적이다. 최근 Hive의 향상된 기능에는 업데이트/삽입/삭제 기능이 포함되어 있지만 최적의 솔루션을 선택하는 것은 여전히 어려운 일입니다.
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);
덮어쓸 대상 테이블의 파티션을 제한하는 등 성능 향상을 위해 최적화를 적용할 수 있습니다. 파티션 목록을 매개변수로 전달하면 프로세스 속도가 크게 향상될 수 있습니다.
증분 업데이트에 필요한 경우 모든 열을 새 데이터로 업데이트하는 경우 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!