Använda QVD-filer för inkrementell laddning

Det är väldigt vanligt med inkrementell laddning av databaser. Inkrementell laddning definieras som att endast de poster som är nya eller som har ändrats läses in från databasen. Övriga data bör redan finnas tillgängliga, på ett eller annat sätt. Med QVD-filer kan man utföra inkrementell laddning i de flesta fall. Se QVD-filer.

Grundläggande steg beskrivs nedan:

1. Ladda nya data från databastabellen (en långsam process, men endast ett begränsat antal poster laddas).

2. Ladda gamla data från QVD-filer (laddar många poster, men en mycket snabbare process).

3. Skapa en ny QVD-fil.

4. Upprepa proceduren för alla laddade tabeller.

Hur komplex denna lösning faktiskt är beror på hur käll-databasen ser ut. Följande grundläggande delar kan dock identifieras:

1) Fall 1: Endast tillägg (endast loggfiler)

2) Fall 2: Infoga endast (ingen uppdatering eller borttagning)

3) Fall 3: Infoga och uppdatera (ingen borttagning)

4) Fall 4: Infoga, uppdatera och ta bort

Se nedan för en sammanfattning av hur dessa olika lösningar kan se ut: QVD-filer kan läsas i optimerat läge eller i standardläge. (Vilket sätt som används bestäms automatiskt av QlikView-skriptmotorn beroende på hur komplex åtgärden är.) Optimerat läge är (mycket ungefärligt) ungefär 10 gånger snabbare än standardläge eller omkring 100 gånger snabbare än om databasen laddas på vanligt sätt.

Fall 1: Endast tillägg

Det enklaste fallet gäller loggfiler; filer där poster endast läggs till och aldrig tas bort. Följande villkor måste uppfyllas:

  • Databasen måste vara en loggfil (eller någon annan fil där poster endast läggs till på slutet och inga poster tas bort) som ligger inuti en textfil (inte ODBC/OLE DB).

  • QlikView håller reda på hur många poster som har lästs in tidigare och läser endast in de poster som tillkommit i slutet av filen.

Exempel:  

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

Fall 2: Infoga endast (ingen uppdatering eller borttagning)

Om datan ligger på en annan databas än en enkel loggfil kommer inte exempel 1 ovan att fungera. Problemet kan dock lösas med en liten extra arbetsinsats: Följande villkor måste uppfyllas:

  • Datakällan kan vara av vilken typ som helst

  • QlikView läser in de poster som har infogats i databasen efter den senaste skriptexekveringen.

  • Ett fält, ModificationDate (eller liknande), krävs för att QlikView ska veta vilka poster som är nya

Exempel:  

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;

(Brädgårdarna i SQL WHERE-satsen anger början och slutet på ett datum. Kontrollera databasens dokumentation för att få rätt datumsyntax för din databas).

Fall 3: Infoga och uppdatera (ingen borttagning)

Nästa exempel gäller data från tidigare inlästa poster som kan ha ändrats mellan skriptexekveringar. Följande villkor måste uppfyllas:

  • Datakällan kan vara av vilken typ som helst

  • QlikView läser in poster som har infogats i databasen, eller som har uppdaterats där efter den senaste skriptexekveringen

  • Ett fält, ModificationDate (eller liknande), krävs för att QlikView ska veta vilka poster som är nya

  • Ett primärt nyckelfält krävs för att QlikView ska kunna sortera ut uppdaterade poster från QVD-filen.

  • Denna lösning innebär att läsningen av QVD-filen görs i standardläget (och inte i det optimerade läget), vilket fortfarande är betydligt snabbare än att ladda hela databasen.

Exempel:  

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;

 

Fall 4: Infoga, uppdatera och ta bort

Det mest komplicerade fallet att hantera är när posterna faktiskt har tagits bort från källdatabasen mellan skriptexekveringarna. Följande villkor måste uppfyllas:

  • Datakällan kan vara av vilken typ som helst

  • QlikView läser in poster som har infogats i databasen, eller som har uppdaterats där efter den senaste skriptexekveringen.

  • QlikView avlägsnar poster som har tagits bort där efter den senaste skriptexekveringen.

  • Ett fält, ModificationDate (eller liknande), krävs för att QlikView ska veta vilka poster som är nya

  • Ett primärt nyckelfält krävs för att QlikView ska kunna sortera ut uppdaterade poster från QVD-filen.

  • Denna lösning innebär att läsningen av QVD-filen görs i standardläget (och inte i det optimerade läget), vilket fortfarande är betydligt snabbare än att ladda hela databasen.

Exempel:  

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

Hjälpte den här informationen?

Tack för att du berättar det här. Är det något du vill säga om det här avsnittet?

Varför var informationen inte till hjälp och hur kan vi förbättra den?