임팔라처럼 20 열로 Vertica의 표 B를 만듭니다.
임팔라와 Vertica를 모두 연결하는 Java 프로그램을 빌드하십시오. 이 프로그램에서 벌크는 SELECT * FROM impala.B
을 메모리의 배열로 대량 읽어 들인 다음 대상 문에 대한 호스트 변수와 동일한 메모리를 사용합니다. id
경우
는 (50 COL 나타난 A.과 동일한 구조 및 동일한 기본 키 (이상적으로는 하나의 열)과 다음
자르기 스테이징 테이블 INSERT /*+DIRECT */ INTO stg_A SELECT B.*, A.col21,A.col22 .... A.col50 FROM B JOIN A ON stg_A.id=A.id
을 준비 테이블 stg_A
생성 (또는 계속) 기본 키). 이렇게하면 20 개의 기둥이 임팔라에서 나오고 나머지는 표적에서 나온 것입니다.
마지막으로, 최적화 된 병합 실행 병합이 (가) 계획을 설명 최적화 된 병합이 INSERT와 DELETE에 대한 완전한 액세스 경로에 대한 완전한 액세스 경로를 가지고
MERGE /*+DIRECT*/
INTO A t
USING stg_A s
ON s.id = t.id
WHEN MATCHED THEN UPDATE SET
id = s.id
, col02 = s.col02
, col03 = s.col03
, col04 = s.col04
, col05 = s.col05
[...]
, col50 = s.col50
WHEN NOT MATCHED THEN INSERT VALUES (
s.s.id
, s.s.col02
, s.s.col03
, s.s.col04
, s.s.col05
, s.[...]
, s.s.col50
);
당신은 볼 것없이 액세스 MERGE 경로.
안녕하세요, 답장을 보내 주셔서 감사합니다. 나는 임팔라에서 select *와 같은 다른 방법을 시도해 보았고 vertica temp에 위의 select 열과 같은 열을 사용하여 테이블을 만들고 * 모든 값을 temp에 삽입했습니다. 그런 다음 비슷한 키와 날짜 조건 단일 쿼리에서 조인과 임시 키를 비교하여 Vertica B를 업데이트하십시오. 지금 성능을 확인하는 중입니다 ... –
잘 작동 중 ... 업데이트 날짜 t SET column1 = t.column1 발신자 번호 WHERE ts.column2 = t.column2 AND ts.column3 = t.column3 = t.column3 및 date (ts. column4) = '2017-02-08'; –
최적화 된 MERGE를 사용하면 더 빠를 것입니다. 설명서를 읽으십시오. ... – marcothesane