QVD-bestanden gebruiken voor incrementeel laden

Databases worden vaak incrementeel geladen. Daarbij worden alleen nieuwe of gewijzigde records uit de database geladen. Alle andere gegevens zouden namelijk al op een andere plaats beschikbaar moeten zijn. QVD-bestanden maken incrementeel laden in de meeste gevallen mogelijk.

Het basisproces wordt hieronder beschreven:

1. De nieuwe gegevens worden uit de databasetabel geladen (een langzaam proces, waarbij echter maar een beperkt aantal records wordt geladen).

2. De oude gegevens worden uit het QVD-bestand geladen (er worden veel records geladen, maar dit gaat veel sneller).

3. Maak een nieuw QVD-bestand.

4. De procedure wordt voor elke geladen tabel herhaald.

De complexiteit van dit proces is afhankelijk van de aard van de brondatabase, maar er zijn vier basissituaties te onderscheiden:

1) Situatie 1: Alleen toevoegen (gewoonlijk logbestanden

2) Situatie 2: Alleen invoegen (niet wijzigen of verwijderen)

3) Situatie 3: Invoegen en bijwerken (niet verwijderen)

4) Situatie 4: Invoegen, bijwerken en verwijderen

Verderop vindt u een korte beschrijving van elke situatie. Het lezen van QVD-bestanden kan in de geoptimaliseerde modus of in de standaardmodus plaatsvinden. (De modus wordt automatisch door de QlikView-script-engine gekozen, op basis van de complexiteit van de handeling.) De geoptimaliseerde modus is ongeveer 10 keer sneller dan de standaardmodus en ongeveer 100 keer sneller dan het laden van de database in de oorspronkelijke uitvoering.

Situatie 1: Alleen toevoegen

Een logboekbestand, waarbij alleen records worden toegevoegd en nooit verwijderd, is het eenvoudigst. De volgende voorwaarden zijn van toepassing:

  • De database moet een logbestand zijn (of een ander bestand waarbij records worden toegevoegd en niet ingevoegd of verwijderd) dat is opgenomen in een tekstbestand (geen ODBC/OLE DB).

  • QlikView houdt het aantal records bij dat eerder gelezen is en laadt alleen de records die aan het eind van het bestand zijn toegevoegd.

Example:  

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

Situatie 2: Alleen invoegen (niet wijzigen of verwijderen)

Als de gegevens zich niet in een eenvoudig logboekbestand bevinden, is situatie 1 niet van toepassing. Toch kan het probleem worden opgelost met een minimum hoeveelheid extra werk. De volgende voorwaarden zijn van toepassing:

  • De gegevensbron kan elke willekeurige database zijn.

  • QlikView laadt de records die na de laatste scriptuitvoering zijn ingevoegd.

  • Er is een veld Wijzigingsdatum/tijd (of soortgelijk) vereist, waaraan QlikView kan herkennen welke records nieuw zijn.

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 (qvd);

STORE QV_Table INTO File.QVD;

(De hekjes in de SQL WHERE-clausule definiëre het begin en einde van een datum. Controleer de handleiding bij uw database voor de correcte datumsyntaxis voor uw database.)

Situatie 3: Invoegen en bijwerken (niet verwijderen)

De volgende situatie is van toepassing wanneer gegevens in eerder geladen records tussen twee scriptuitvoeringen gewijzigd kunnen zijn. De volgende voorwaarden zijn van toepassing:

  • De gegevensbron kan elke willekeurige database zijn.

  • QlikView laadt de records die na de laatste scriptuitvoering in de database zijn ingevoegd of gewijzigd.

  • Er is een veld Wijzigingsdatum/tijd (of soortgelijk) vereist, waaraan QlikView kan herkennen welke records nieuw zijn.

  • Er is een primair sleutelveld vereist, waaraan QlikView kan zien welke records in het QVD-bestand gewijzigd zijn.

  • Deze oplossing moet in de standaardmodus worden uitgevoerd (in plaats van de geoptimaliseerde modus), wat nog altijd aanzienlijk sneller gaat dan het laden van de volledige database.

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);

 

STORE QV_Table INTO File.QVD;

 

Situatie 4: Invoegen, bijwerken en verwijderen

De moeilijkste situatie is die waarbij records tussen twee scriptuitvoeringen uit de brondatabase zijn verwijderd. De volgende voorwaarden zijn van toepassing:

  • De gegevensbron kan elke willekeurige database zijn.

  • QlikView laadt de records die na de laatste scriptuitvoering in de database zijn ingevoegd of gewijzigd.

  • QlikView verwijdert de records die na de laatste scriptuitvoering zijn verwijderd.

  • Er is een veld Wijzigingsdatum/tijd (of soortgelijk) vereist, waaraan QlikView kan herkennen welke records nieuw zijn.

  • Er is een primair sleutelveld vereist, waaraan QlikView kan zien welke records in het QVD-bestand gewijzigd zijn.

  • Deze oplossing moet in de standaardmodus worden uitgevoerd (in plaats van de geoptimaliseerde modus), wat nog altijd aanzienlijk sneller gaat dan het laden van de volledige database.

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