증분 로드를 통해 새 레코드 및 업데이트된 레코드 로드

앱에 지속적으로 업데이트되는 데이터베이스 소스의 데이터가 대량으로 포함된 경우 전체 데이터 셋을 다시 로드하려면 시간이 오래 걸릴 수 있습니다. 이런 경우, 다른 데이터는 모두 이미 앱에서 사용할 수 있으므로 해당 데이터베이스의 새 레코드나 변경된 레코드만 로드할 수 있습니다. QVD 파일을 사용하는 증분 로드를 통해 이 작업을 수행할 수 있습니다.

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

  1. 데이터베이스 소스 테이블에서 새 데이터나 업데이트된 데이터를 로드합니다.

    느린 프로세스이지만 제한된 수의 레코드만 로드됩니다.

  2. 앱에서 이미 사용 가능한 데이터를 QVD 파일에서 로드합니다.

    많은 수의 레코드가 로드되지만 훨씬 빠른 프로세스입니다.

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

    다음 번에 증분 로드를 수행할 때 이 파일을 사용합니다.

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

다음 예에는 증분 로드가 사용되는 사례가 나와 있습니다. 하지만 소스 데이터베이스 구조와 작업 모드에 따라 좀더 복잡한 솔루션이 필요할 수 있습니다.

  • 추가만(일반적으로 로그 파일에 사용)
  • 삽입만(업데이트 또는 삭제는 제외)
  • 삽입 및 업데이트(삭제는 제외)
  • 삽입, 업데이트 및 삭제

최적화 모드 또는 표준 모드에서 QVD 파일을 읽을 수 있습니다. (사용되는 방법은 작업의 복잡성에 따라 Qlik Sense 엔진에 의해 자동으로 선택됩니다.) 최적화 모드는 표준 모드보다 약 10배 빠르거나 데이터베이스를 일반적인 방식으로 로드하는 것보다 약 100배 빠릅니다.

자세한 내용은 QVD 파일 작업를 참조하십시오.

추가만

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

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

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

Example:  

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

삽입만(업데이트 또는 삭제는 제외)

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

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

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

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

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;

STORE QV_Table INTO File.QVD;

 

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

삽입 및 업데이트(삭제는 제외)

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

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

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

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

  • Qlik Sense에서 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);

WHERE NOT Exists(PrimaryKey);

 

STORE QV_Table INTO File.QVD;

삽입, 업데이트 및 삭제

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

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

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

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

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

  • Qlik Sense에서 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