Merge
Merge 접두사를 스크립트의 LOAD 또는 SELECT 문에 추가하여 로드된 테이블을 다른 테이블에 병합하도록 지정할 수 있습니다. 또한 이 문을 부분 로드에서 실행하도록 지정합니다.
일반적인 사용 사례로 변경 로그를 로드하고 이를 사용하여 기존 테이블에 inserts, updates 및 deletes를 적용합니다.
로드 버튼을 사용하여 부분 로드를 수행합니다.자세한 내용은 버튼를 참조하십시오. Qlik Engine JSON API을 사용할 수도 있습니다.
구문:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
인수:
인수 | 설명 |
---|---|
only | 문이 부분 로드 중에만 실행되어야 함을 표시하는 선택적 한정자입니다. 일반(부분 아님) 로드 중에는 문이 무시됩니다. |
SequenceNoField | 작업 순서를 정의하는 타임스탬프 또는 시퀀스 번호가 포함된 필드의 이름입니다. |
SequenceNoVar |
병합되는 테이블의 SequenceNoField의 최댓값이 할당되는 변수의 이름입니다. |
ListOfKeys | 기본 키를 지정하는 쉼표로 구분된 필드 이름 목록입니다. |
Operation | LOAD 문의 첫 번째 필드에는 'Insert', 'Update' 또는 'Delete'와 같은 텍스트 문자열 작업이 있어야 합니다. ‘i’, ‘u’ 및 ‘d’도 허용됩니다. |
일반 기능
일반(부분 아님) 로드 중에 Merge LOAD 구조는 일반 Load 문으로 작동하지만 오래된 레코드 및 삭제 표시된 레코드를 제거하는 추가 기능으로 작동합니다. Load 문의 첫 번째 필드에는 작업에 대한 정보가 있어야 합니다. Insert, Update 또는 Delete
로드된 각 레코드에서 레코드 식별자가 이전에 로드된 레코드와 비교되고 최신 레코드(순서 번호에 따라)만 유지됩니다. 최신 레코드가 Delete로 표시되면 유지되는 레코드가 없습니다.
대상 테이블
필드 집합으로 결정되는 수정할 테이블입니다. 동일한 필드 집합이 있는 테이블(첫 번째 필드인 작업 필드 제외)이 이미 존재하는 경우 이 테이블이 수정할 관련 테이블이 됩니다. 또는 Concatenate 접두사를 사용하여 테이블을 지정할 수 있습니다. 대상 테이블이 결정되지 않은 경우 Merge LOAD 구조는 새 테이블에 저장됩니다.
Concatenate 접두사가 사용된 경우 결과 테이블에는 기존 테이블과 병합할 입력의 합집합에 해당하는 필드 집합이 있습니다. 따라서 대상 테이블에는 병합할 입력으로 사용되는 변경 로그보다 더 많은 필드가 있을 수 있습니다.
부분 로드도 전체 로드와 동일합니다. 한 가지 차이점은 부분 로드의 경우 새 테이블을 거의 만들지 않는다는 점입니다. Only 절을 사용하지 않은 경우 이전 스크립트 실행과 동일한 필드 집합이 있는 대상 테이블이 항상 존재합니다.
시퀀스 번호
로드된 변경 로그가 누적된 로그인 경우, 즉 이미 로드된 변경 사항이 포함된 경우 매개 변수 SequenceNoVar을 Where 절에서 사용하여 입력 데이터의 양을 제한할 수 있습니다. 그런 다음 필드 SequenceNoField가 SequenceNoVar보다 큰 레코드만 로드하도록 Merge LOAD를 만들 수 있습니다. 완료되면 Merge LOAD가 SequenceNoField 필드에 표시된 최댓값으로 SequenceNoVar에 새 값을 할당합니다.
작업
Merge LOAD는 대상 테이블보다 필드를 적게 포함할 수 있습니다. 작업마다 누락된 필드를 다르게 처리힙니다.
삽입: Merge LOAD에 누락되었지만 대상 테이블에 존재하는 필드는 대상 테이블에서 NULL을 가져옵니다.
삭제: 누락된 필드는 결과에 영향을 주지 않습니다. 관련 레코드는 삭제됩니다.
업데이트: Merge LOAD에 나열된 필드가 대상 테이블에서 업데이트됩니다. 누락된 필드는 변경되지 않습니다. 즉, 다음 두 문은 동일하지 않습니다.
- Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
- Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;
첫 번째 문은 나열된 레코드를 업데이트하고 F2를 NULL로 변경합니다. 두 번째는 F2를 변경하지 않는 대신 대상 테이블의 값을 유지합니다.