QVD 파일을 사용한 증분 로드

증분 로드는 데이터베이스와 관련된 매우 일반적인 작업입니다. 이는 데이터베이스의 새 레코드 또는 변경된 레코드만 로드하는 것을 말합니다. 다른 모든 데이터는 어떻게든 이미 사용 가능해야 합니다. QVD 파일을 사용하면 대부분의 경우 증분 로드를 수행할 수 있습니다.

기본 프로세스는 아래의 설명과 같습니다.

1. 데이터베이스 테이블에서 새 데이터를 로드합니다(느린 프로세스이지만 제한된 수의 레코드를 로드).

2. QVD 파일에서 오래된 데이터를 로드합니다(많은 레코드를 로드하지만 더 빠른 프로세스).

3. 새로운 QVD 파일을 만듭니다.

4. 로드된 모든 테이블에 대해 이 절차를 반복합니다.

기본 사례는 다음과 같습니다. 단, 소스 데이터베이스의 특성에 따라 실제 솔루션의 복잡성은 다를 수 있습니다.

1) 사례 1: 추가만(일반적으로 로그 파일)

2) 사례 2: 삽입만(업데이트 또는 삭제는 제외)

3) 사례 3: 삽입 및 업데이트(삭제는 제외)

4) 사례 4: 삽입, 업데이트 및 삭제

아래에서 각 사례에 대한 개략적인 솔루션을 확인할 수 있습니다. QVD 파일 읽기는 최적화 모드 또는 표준 모드에서 가능합니다. (연산의 복잡성에 따라 QlikView 스크립트 엔진에서 자동으로 선택한 방법이 적용됨) 최적화 모드는 표준 모드보다 거의 10배 정도 빠르며, 기존의 방법으로 데이터베이스를 로드하는 것보다 100배 정도 빠릅니다.

사례 1: 추가만

가장 간단한 사례로는 레코드가 추가되기만 하고 삭제되지는 않는 로그 파일이 있습니다. 다음 조건이 적용됩니다.

  • 데이터베이스는 텍스트 파일(ODBC/OLE DB 아님)에 포함된 로그 파일(또는 레코드가 추가되기만 하고 삽입 또는 삭제되지는 않는 다른 파일)이어야 합니다.

  • QlikView에서는 이전에 읽은 레코드의 수를 기록하고 파일의 끝에 추가된 레코드만 로드합니다.

Example:  

Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);

사례 2: 삽입만(업데이트 또는 삭제는 제외)

데이터가 단순한 로그 파일이 아닌 데이터베이스에 존재하는 경우 사례 1 방식은 효과가 없습니다. 하지만 최소한의 추가 작업으로 문제를 해결할 수 있습니다. 다음 조건이 적용됩니다.

  • 데이터 소스는 모든 데이터베이스일 수 있습니다.

  • QlikView에서 마지막 스크립트 실행 후 데이터베이스에 삽입된 레코드를 로드합니다.

  • QlikView에서 새 레코드 여부를 인식하려면 ModificationDate 필드(또는 유사한 필드)가 필요합니다.

Example:  

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD (qvd);

STORE QV_Table INTO File.QVD;

(SQL WHERE 절에서 해시 기호는 날짜의 시작과 끝을 정의합니다. 사용 중인 데이터베이스의 올바른 날짜 구문은 데이터베이스 설명서에서 확인하십시오.)

사례 3: 삽입 및 업데이트(삭제는 제외)

다음 사례는 이전에 로드된 레코드의 데이터가 스크립트 실행 도중 변경된 경우 적용할 수 있습니다. 다음 조건이 적용됩니다.

  • 데이터 소스는 모든 데이터베이스일 수 있습니다.

  • QlikView에서 마지막 스크립트 실행 후 데이터베이스에 삽입되거나 데이터베이스에서 업데이트된 레코드를 로드합니다.

  • QlikView에서 새 레코드 여부를 인식하려면 ModificationDate 필드(또는 유사한 필드)가 필요합니다.

  • QlikView에서 QVD 파일의 업데이트된 레코드를 정렬하려면 기본 키 필드가 필요합니다.

  • 이 솔루션은 QVD 파일이 최적화 모드보다는 표준 모드에서 로드되도록 합니다. 그래도 전체 데이터베이스를 로드하는 것보다 속도가 상당히 빠릅니다.

Example:  

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD

WHERE NOT Exists(PrimaryKey);

 

STORE QV_Table INTO File.QVD;

 

사례 4: 삽입, 업데이트 및 삭제

처리가 가장 어려운 사례는 스크립트 실행 도중 레코드가 실제로 소스 데이터베이스에서 삭제되는 경우입니다. 다음 조건이 적용됩니다.

  • 데이터 소스는 모든 데이터베이스일 수 있습니다.

  • QlikView에서 마지막 스크립트 실행 후 데이터베이스에 삽입되거나 데이터베이스에서 업데이트된 레코드를 로드합니다.

  • QlikView에서 마지막 스크립트 실행 후 데이터베이스에서 삭제된 레코드를 제거합니다.

  • QlikView에서 새 레코드 여부를 인식하려면 ModificationDate 필드(또는 유사한 필드)가 필요합니다.

  • QlikView에서 QVD 파일의 업데이트된 레코드를 정렬하려면 기본 키 필드가 필요합니다.

  • 이 솔루션은 QVD 파일이 최적화 모드보다는 표준 모드에서 로드되도록 합니다. 그래도 전체 데이터베이스를 로드하는 것보다 속도가 상당히 빠릅니다.

Example:  

Let ThisExecTime = Now( );

 

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(ThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD

WHERE NOT EXISTS(PrimaryKey);

 

Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;

 

If ScriptErrorCount = 0 then

STORE QV_Table INTO File.QVD;

Let LastExecTime = ThisExecTime;

End If