기본 콘텐츠로 건너뛰기

Merge

이 페이지에서

Merge

Merge 접두사를 스크립트의 LOAD 또는 SELECT 문에 추가하여 로드된 테이블을 다른 테이블에 병합하도록 지정할 수 있습니다. 또한 이 문을 부분 로드에서 실행하도록 지정합니다.

일반적인 사용 사례로 변경 로그를 로드하고 이를 사용하여 기존 테이블에 inserts, updatesdeletes를 적용합니다.

참고: 부분 로드는 Qlik Engine JSON API 또는 로드 버튼을 사용하여 지원됩니다. 로드 버튼에 대한 자세한 내용은 버튼을 참조하십시오.

Syntax:  

Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)

 

일반(부분 아님) 로드 중에 Merge LOAD 구조는 일반 Load 문으로 작동하지만 오래된 레코드 및 삭제 표시된 레코드를 제거하는 추가 기능으로 작동합니다. load 문의 첫 번째 필드에는 작업에 대한 정보가 있어야 합니다: Insert, Update 또는 Delete

로드된 각 레코드에서 레코드 식별자가 이전에 로드된 레코드와 비교되고 최신 레코드(순서 번호에 따라)만 유지됩니다. 최신 레코드가 Delete로 표시되면 유지되는 레코드가 없습니다.

Concatenate 접두사가 사용되거나 동일한 필드 집합이 있는 테이블이 있는 경우 이는 수정할 관련 테이블입니다. 그렇지 않으면 Merge LOAD 구조 결과가 새 테이블에 저장됩니다.

Concatenate 접두사가 사용되는 경우 결과 테이블에 Merge의 입력으로 사용되는 변경 로그보다 많은 필드가 있을 수 있습니다.

부분 로드도 전체 로드와 동일합니다. 유일한 차이는 Merge LOAD 구조는 새 테이블을 만들지 않는다는 것입니다. 수정할 이전 스크립트 실행의 관련 테이블이 항상 존재합니다.

로드된 변경 로그가 누적된 로그인 경우, 즉 이미 로드된 변경 사항이 포함된 경우 매개 변수 SequenceNoVarWhere 절에서 입력 데이터의 양을 제한할 수 있습니다. 그런 다음 필드 SequenceNoFieldSequenceNoVar보다 큰 레코드만 로드하도록 Merge LOAD를 만들 수 있습니다. 완료되면 Merge LOADSequenceNoField 필드에 표시된 최댓값으로 SequenceNoVar에 새 값을 할당합니다.

Arguments:  

인수
인수 설명
only 문이 부분 로드 중에만 실행되어야 함을 표시하는 선택적 한정자입니다. 일반(부분 아님) 로드 중에는 무시되어야 합니다.
SequenceNoField 작업 순서를 정의하는 타임스탬프 또는 시퀀스 번호가 포함된 필드의 이름입니다.
SequenceNoVar

병합되는 테이블의 SequenceNoField의 최댓값이 할당되는 변수의 이름입니다.

ListOfKeys 기본 키를 지정하는 쉼표로 구분된 필드 이름 목록입니다.
operation load 문의 첫 번째 필드에는 작업이 있어야 합니다. Insert, Update 또는 Delete. ‘i’, ‘u’ 및 ‘d’도 허용됩니다.

Example: 데이터 로드 스크립트

이 예에서 Persons라고 명명된 인라인 테이블은 4개의 행으로 로드됩니다. 그런 다음 Merge를 통해 테이블이 다음과 같이 변경됩니다.

  • Mary, 4 행을 추가합니다.
  • Steven, 3 행을 삭제합니다.
  • Jake에 숫자 5를 할당합니다.

LastChangeDate 변수는 Merge가 실행된 후 ChangeDate 열의 최댓값으로 설정됩니다.

Persons: load * inline [ Name, Number Jake, 3 Jill, 2 Steven, 3 ]; Merge (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD * inline [ Operation, ChangeDate, Name, Number Insert, 1/1/2021, Mary, 4 Delete, 1/1/2021, Steven, Update, 2/1/2021, Jake, 5 ];

Merge 로드 전에 결과 테이블은 다음과 같이 나타납니다.

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Merge 로드 후 결과 테이블은 다음과 같이 나타납니다.

Resulting table
ChangeDate Name Number
2/1/2021 Jake 5
- Jill 2
1/1/2021 Mary 4

데이터가 로드되면 데이터 로드 진행률 대화 상자에 수행되는 작업이 표시됩니다.

데이터 로드 진행률 대화 상자

Data load progress dialog box.

Example: 데이터 로드 스크립트 - 부분 로드

다음 예에서 Only 인수는 Merge 명령이 부분 로드 중에만 실행되도록 지정합니다. 업데이트는 이전에 캡처된 LastChangeDate를 기반으로 필터링됩니다. Merge가 완료되면 LastChangeDate 변수에 병합 중에 처리된 ChangeDate 열의 최댓값이 할당됩니다.

Merge Only (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD Operation, ChangeDate, Name, Number from [lib://ChangeFilesFolder/BulkChangesInPersonsTable.csv] (txt) where ChangeDate >= $(LastChangeDate);