Nieuwe en bijgewerkte records laden via incrementeel laden
Als uw app een grote hoeveelheid gegevens bevat uit databasebronnen die continu worden bijgewerkt, kan het opnieuw laden van de gehele gegevensverzameling veel tijd kosten. In dit geval wilt u alleen nieuwe of gewijzigde records laden vanuit de database. Alle andere gegevens zouden al beschikbaar moeten zijn in de app. Met incrementeel laden, via QVD-bestanden, kunt u dit voor elkaar krijgen.
Het basisproces wordt hieronder beschreven:
-
Laad nieuwe of bijgewerkte gegevens vanuit de tabel met databasebronnen.
Dit is een traag proces, maar er wordt slechts een beperkt aantal records geladen.
-
Laad gegevens die al beschikbaar zijn in de app vanuit het QVD-bestand.
Er worden vele records geladen, maar dit is een veel sneller proces.
-
Een nieuw QVD-bestand maken.
Dit is het bestand dat u gaat gebruiken wanneer u de volgende keer incrementeel gaat laden.
- De procedure wordt voor elke geladen tabel herhaald.
De volgende voorbeelden laten zien wanneer incrementeel laden wordt gebruikt. Mogelijk is echter een complexere oplossing vereist, afhankelijk van de structuur van de brondatabase en de bedrijfsmodus.
- Alleen invoegen (niet bijwerken of verwijderen)
- Invoegen en bijwerken (niet verwijderen)
- Invoegen, bijwerken en verwijderen
U kunt QVD-bestanden lezen in geoptimaliseerde modus of standaardmodus. (De toegepaste methode wordt automatisch door de Qlik Sense-engine geselecteerd op basis van de complexiteit van de bewerking.) De geoptimaliseerde modus is ongeveer 10 keer sneller dan de standaardmodus en ongeveer 100 keer sneller dan het op de normale wijze laden van de database.
Ga voor meer informatie naar Werken met QVD-bestanden.
Alleen invoegen (niet bijwerken of verwijderen)
Als de gegevens zich niet in een eenvoudig logboekbestand bevinden, werkt toevoegen niet. Toch kan het probleem worden opgelost met een minimale hoeveelheid extra werk. De volgende voorwaarden zijn van toepassing:
-
De gegevensbron kan elke willekeurige database zijn.
-
Qlik Sense laadt de records die na de laatste scriptuitvoering zijn ingevoegd.
-
Er is een ModificationTime veld (of soortgelijk) vereist, waaraan Qlik Sense kan herkennen welke records nieuw zijn.
Voorbeeld:
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];
De hekjes in de SQL WHERE-clausule definiëren het begin en einde van een datum. Controleer de handleiding bij uw database voor de correcte datumsyntaxis voor uw database.
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.
Qlik Sense laadt de records die na de laatste scriptuitvoering in de database zijn ingevoegd of gewijzigd.
Er is een veld ModificationTime (of soortgelijk) vereist, waaraan Qlik Sense kan herkennen welke records nieuw zijn.
Er is een primair sleutelveld vereist, waaraan Qlik Sense kan zien welke records in het QVD-bestand gewijzigd zijn.
Het lezen van het QVD-bestand 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.
Voorbeeld:
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];
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.
Qlik Sense laadt de records die na de laatste scriptuitvoering in de database zijn ingevoegd of gewijzigd.
Qlik Sense verwijdert de records die na de laatste scriptuitvoering zijn verwijderd.
Er is een veld ModificationTime (of soortgelijk) vereist, waaraan Qlik Sense kan herkennen welke records nieuw zijn.
Er is een primair sleutelveld vereist, waaraan Qlik Sense kan zien welke records in het QVD-bestand gewijzigd zijn.
Het lezen van het QVD-bestand 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.
Voorbeeld:
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