증분 로드를 통해 새 레코드 및 업데이트된 레코드 로드
앱에 지속적으로 업데이트되는 데이터베이스 소스의 데이터가 대량으로 포함된 경우 전체 데이터 셋을 다시 로드하려면 시간이 오래 걸릴 수 있습니다. 이 경우 데이터베이스에서 새 레코드 또는 변경된 레코드를 로드할 수 있습니다. 다른 데이터는 모두 이미 앱에서 사용할 수 있습니다. QVD 파일을 사용하는 증분 로드를 통해 이 작업을 수행할 수 있습니다.
기본 프로세스는 아래의 설명과 같습니다.
-
데이터베이스 소스 테이블에서 새 데이터나 업데이트된 데이터를 로드합니다.
느린 프로세스이지만 제한된 수의 레코드만 로드됩니다.
-
앱에서 이미 사용 가능한 데이터를 QVD 파일에서 로드합니다.
많은 수의 레코드가 로드되지만 훨씬 빠른 프로세스입니다.
-
새로운 QVD 파일을 만듭니다.
다음 번에 증분 로드를 수행할 때 이 파일을 사용합니다.
- 로드된 모든 테이블에 대해 이 절차를 반복합니다.
다음 예에는 증분 로드가 사용되는 사례가 나와 있습니다. 하지만 소스 데이터베이스 구조와 작업 모드에 따라 좀더 복잡한 솔루션이 필요할 수 있습니다.
- 추가만(일반적으로 로그 파일에 사용)
- 삽입만(업데이트 또는 삭제는 제외)
- 삽입 및 업데이트(삭제는 제외)
- 삽입, 업데이트 및 삭제
최적화 모드 또는 표준 모드에서 QVD 파일을 읽을 수 있습니다. (사용되는 방법은 작업의 복잡성에 따라 Qlik Sense 엔진에 의해 자동으로 선택됩니다.) 최적화 모드는 표준 모드보다 약 10배 빠르거나 데이터베이스를 일반적인 방식으로 로드하는 것보다 약 100배 빠릅니다.
자세한 내용은 QVD 파일 작업을 참조하십시오.
추가만
가장 간단한 사례로는 레코드가 추가되기만 하고 삭제되지는 않는 로그 파일이 있습니다. 다음 조건이 적용됩니다.
-
데이터베이스는 텍스트 파일(ODBC, OLE DB 또는 기타 데이터베이스는 지원되지 않음)에 포함된 로그 파일(또는 레코드가 추가되기만 하고 삽입 또는 삭제되지는 않는 다른 파일)이어야 합니다.
-
Qlik Sense에서는 이전에 읽은 레코드의 수를 기록하고 파일의 끝에 추가된 레코드만 로드합니다.
Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);
삽입만(업데이트 또는 삭제는 제외)
데이터가 단순한 로그 파일이 아닌 데이터베이스에 존재하는 경우 추가 방식은 효과가 없습니다. 하지만 최소한의 추가 작업으로 문제를 해결할 수 있습니다. 다음 조건이 적용됩니다.
-
데이터 소스는 모든 데이터베이스일 수 있습니다.
-
Qlik Sense에서 마지막 스크립트 실행 후 데이터베이스에 삽입된 레코드를 로드합니다.
-
Qlik Sense에서 새 레코드 여부를 인식하려면 ModificationTime 필드(또는 유사한 필드)가 필요합니다.
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 파일을 최적화 모드보다는 표준 모드에서 읽습니다. 그래도 전체 데이터베이스를 로드하는 것보다 속도가 상당히 빠릅니다.
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;
삽입, 업데이트 및 삭제
처리가 가장 어려운 사례는 스크립트 실행 도중 레코드가 실제로 소스 데이터베이스에서 삭제되는 경우입니다. 다음 조건이 적용됩니다.
데이터 소스는 모든 데이터베이스일 수 있습니다.
Qlik Sense에서 마지막 스크립트 실행 후 데이터베이스에 삽입되거나 데이터베이스에서 업데이트된 레코드를 로드합니다.
Qlik Sense에서 마지막 스크립트 실행 후 데이터베이스에서 삭제된 레코드를 제거합니다.
Qlik Sense에서 새 레코드 여부를 인식하려면 ModificationTime 필드(또는 유사한 필드)가 필요합니다.
Qlik Sense에서 QVD 파일의 업데이트된 레코드를 정렬하려면 기본 키 필드가 필요합니다.
이 솔루션은 QVD 파일을 최적화 모드보다는 표준 모드에서 읽습니다. 그래도 전체 데이터베이스를 로드하는 것보다 속도가 상당히 빠릅니다.
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