2014-09-25 2 views

답변

0

새 레코드를 식별하려면 날짜 (시간) 열이 필요합니다. 그런 다음

당신이 이런 식으로 할 수 있습니다 : 여기

///$tab Main 
SET ThousandSep='.'; 
SET DecimalSep=','; 
SET MoneyThousandSep='.'; 
SET MoneyDecimalSep=','; 
SET MoneyFormat='#.##0,00 €;-#.##0,00 €'; 
SET TimeFormat='hh:mm:ss'; 
SET DateFormat='DD.MM.YYYY'; 
SET TimestampFormat='DD.MM.YYYY hh:mm:ss[.fff]'; 
SET MonthNames='Jan;Feb;Mrz;Apr;Mai;Jun;Jul;Aug;Sep;Okt;Nov;Dez'; 
SET DayNames='Mo;Di;Mi;Do;Fr;Sa;So'; 

set vSourceDir = 'C:\devel\qlikview\2013\Incremental_Load\'; 

///$tab Initial 
// Initial data load 

/* 

Sales: 
LOAD OrderId, 
    ProductId, 
    CustomerId, 
    Amount, 
    date(Date_updated) as Date_updated 
FROM 
$(vSourceDir)Data.xlsx 
(ooxml, embedded labels, table is Orders); 

STORE Sales INTO $(vSourceDir)sales.qvd (qvd); 

*/ 
///$tab Load from QVD 
// load sales.qvd 

Sales: 
LOAD OrderId, 
    ProductId, 
    CustomerId, 
    Amount, 
    date(Date_updated) as Date_updated 
FROM 
$(vSourceDir)sales.qvd 
(qvd); 

Sort_Sales: 
LOAD * 
Resident Sales 
Order By Date_updated; 

LET vLastUpdateDate = date(Peek('Date_updated', -1, 'Sort_Sales')); 


DROP TABLE Sales; 

///$tab Perform Incremental load 
// load only new (incremental) data 

Incremental: 
NoConcatenate 
LOAD OrderId, 
    ProductId, 
    CustomerId, 
    Amount, 
    date(Date_updated) as Date_updated 
FROM 
$(vSourceDir)Data.xlsx 
(ooxml, embedded labels, table is NewOrders) 
where date(Date_updated) >= '$(vLastUpdateDate)'; 



///$tab Update QVD 
// load data from qvd without the records that where changed 

Concatenate 
LOAD OrderId, 
    ProductId, 
    CustomerId, 
    Amount, 
    date(Date_updated) as Date_updated 
FROM 
$(vSourceDir)sales.qvd (qvd) 
where not exists(OrderId); 

STORE Incremental INTO $(vSourceDir)sales.qvd; 

하는 것은 엄격하게, 날짜/시간 필드가 될 것입니다 뭔가를 필요로하지 않는 설명 https://www.youtube.com/watch?v=UkKTmnKSNQo

에게 HTH

+0

입니다 "보장되는"것은 단조 증가하고있다. 일부 데이터베이스 (많은?)는 정수를 기본 키로 사용하므로 롤오버 (또는 다시 채우기)에 관심이없는 한이 충분할 수 있습니다. 중요한 것은 그것이 연속적이든 정수 든 "비교 가능"하다는 것입니다. – r2evans

관련 문제