증분 로드를 통해 새 레코드 및 업데이트된 레코드 로드
앱에 지속적으로 업데이트되는 데이터베이스 소스의 데이터가 대량으로 포함된 경우 전체 데이터 집합을 다시 로드하려면 시간이 오래 걸릴 수 있습니다. 이 경우 데이터베이스에서 새 레코드 또는 변경된 레코드를 로드할 수 있습니다. 다른 데이터는 모두 이미 앱에서 사용할 수 있습니다. QVD 파일을 사용하는 증분 로드를 통해 이 작업을 수행할 수 있습니다.
기본 프로세스는 아래의 설명과 같습니다.
-
데이터베이스 소스 테이블에서 새 데이터나 업데이트된 데이터를 로드합니다.
느린 프로세스이지만 제한된 수의 레코드만 로드됩니다.
-
앱에서 이미 사용 가능한 데이터를 QVD 파일에서 로드합니다.
많은 수의 레코드가 로드되지만 훨씬 빠른 프로세스입니다.
-
새로운 QVD 파일을 만듭니다.
다음 번에 증분 로드를 수행할 때 이 파일을 사용합니다.
- 로드된 모든 테이블에 대해 이 절차를 반복합니다.
다음 예에는 증분 로드가 사용되는 사례가 나와 있습니다. 하지만 소스 데이터베이스 구조와 작업 모드에 따라 좀더 복잡한 솔루션이 필요할 수 있습니다.
- 삽입만(업데이트 또는 삭제는 제외)
- 삽입 및 업데이트(삭제는 제외)
- 삽입, 업데이트 및 삭제
최적화 모드 또는 표준 모드에서 QVD 파일을 읽을 수 있습니다. (사용되는 방법은 작업의 복잡성에 따라 Qlik Sense 엔진에 의해 자동으로 선택됩니다.) 최적화 모드는 표준 모드보다 약 10배 빠르거나 데이터베이스를 일반적인 방식으로 로드하는 것보다 약 100배 빠릅니다.
자세한 내용은 QVD 파일 작업을 참조하십시오.
삽입만(업데이트 또는 삭제는 제외)
데이터가 단순한 로그 파일이 아닌 데이터베이스에 존재하는 경우 추가 방식은 효과가 없습니다. 하지만 최소한의 추가 작업으로 문제를 해결할 수 있습니다. 다음 조건이 적용됩니다.
-
데이터 소스는 모든 데이터베이스일 수 있습니다.
-
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 [lib://DataFiles/File.QVD];
STORE QV_Table INTO [lib://DataFiles/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 [lib://DataFiles/File.QVD]
WHERE NOT Exists(PrimaryKey);
STORE QV_Table INTO [lib://DataFiles/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 [lib://DataFiles/File.QVD]
WHERE NOT EXISTS(PrimaryKey);
Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;
If ScriptErrorCount = 0 then
STORE QV_Table INTO [lib://DataFiles/File.QVD];
Let LastExecTime = ThisExecTime;
End If