Ga naar hoofdinhoud

Merge

Het voorvoegsel Merge kan aan elke LOAD- of SELECT-opdracht in het script worden toegevoegd om op te geven dat de geladen tabel met een andere tabel moet worden samengevoegd. Dit geeft ook aan dat deze opdracht met behulp van gedeeltelijk laden moet worden uitgevoerd.

Deze instructie wordt meestal gebruikt als u een wijzigingslogboek laadt en inserts, updates en deletes wilt toepassen op een bestaande tabel.

InformatieOm ervoor te zorgen dat een gedeeltelijke lading correct werkt, moet de app met gegevens worden geopend voordat een gedeeltelijke lading wordt geactiveerd.

Voer een gedeeltelijke lading uit met de knop Opnieuw laden.Ga voor meer informatie naar Knop. U kunt ook de Qlik Engine JSON API gebruiken.

Als u een gedeeltelijke lading op basis van een schema wilt uitvoeren, klikt u op Meer in een app en kiest u vervolgens Schema lading. In het dialoogvenster dat wordt geopend, schakelt u Gedeeltelijke lading in.

Syntaxis:  

Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)

Argumenten:  

Argumenten
Argument Beschrijving
only Een optionele kwalificatie die aangeeft dat de opdracht alleen moet worden uitgevoerd tijdens het gedeeltelijk laden van gegevens. De opdracht wordt genegeerd tijdens het normaal (niet-gedeeltelijk) laden van gegevens.
SequenceNoField De naam van het veld dat een tijdstempel bevat of een volgnummer dat de volgorde van de bewerkingen definieert.
SequenceNoVar

De naam van de variabele die wordt toegewezen aan de maximumwaarde voor SequenceNoField van de tabel die wordt samengevoegd.

ListOfKeys Een door komma's gescheiden lijst met veldnamen waarin de primaire sleutel is opgegeven.
Operation Het eerste veld van de lOAD-instructie moet de bewerking als tekstreeks bevatten: 'Insert', 'Update' of 'Delete'. ‘i’, ‘u’ en ‘d’ worden ook geaccepteerd.

Algemene functionaliteit

Tijdens een normale (niet-gedeeltelijke) lading zal de constructie Merge LOAD worden uitgevoerd als een normale Load-instructie, maar zorgt dit ook voor de verwijdering van verouderde records en records die zijn gemarkeerd voor verwijdering. Het eerste veld van de Load-instructie moet informatie over de bewerking bevatten: Insert, Update of Delete.

Voor elke geladen record, wordt de identificatie van een record vergelijken met eerder geladen records en alleen het laatste record (op basis van het volgnummer) wordt behouden. Als het laatste record is gemarkeerd met Delete, worden er geen record behouden.

Doeltabel

Welke tabel moet worden gewijzigd, wordt bepaald door de reeks velden. Als een tabel met dezelfde reeks velden (met uitzondering van het eerste veld; de bewerking) al bestaat, wordt dit de tabel die u moet wijzigen. U kunt ook het prefix Concatenate gebruiken om de tabel op te geven. Als de doeltabel niet is bepaald, wordt het resultaat van de Merge LOAD-constructie opgeslagen in een nieuwe tabel.

Als het prefix Concatenate wordt gebruikt, bevat de resulterende tabel een reeks velden die overeenkomt met de verbintenis van de bestaande tabel en de invoer voor de samenvoeging De doeltabel kan daardoor meer tabellen krijgen dan het wijzigingslogboek dat is gebruik als invoer voor de samenvoeging.

Bij een gedeeltelijke lading gebeurt hetzelfde als bij een volledige lading. Het enige verschil is dat bij een gedeeltelijke lading vrijwel nooit een nieuwe tabel wordt gemaakt. Tenzij u de Only-clausule hebt gebruikt, bestaat er altijd een doeltabel met dezelfde reek velden van de vorige uitvoering van het script.

Volgnummer

Als het geladen wijzigingslogboek een samengevoegd logboek is, dan bevat deze wijzigingen die al zijn geladen, de parameter SequenceNoVar kan worden gebruikt in een Where-clausule om een limiet in te stellen voor de invoergegevens. De constructie Merge LOAD kan dan alleen worden gebruikt voor laadrecords waarbij het veld SequenceNoField groter is dan SequenceNoVar. Na voltooiing wijst de constructie Merge LOAD een nieuwe waarde toe aan de SequenceNoVar met de maximumwaarde die te zien is in het veld SequenceNoField.

Bewerkingen

De Merge LOAD kan minder velden bevatten dan de doeltabel. De verschillende bewerkingen gaan anders met missende velden om:

Insert: Ontbrekende velden in de Merge LOAD, die wel bestaan in de doeltabel, krijgen een NULL-waarde in de doeltabel.

Delete: Ontbrekende velden hebben geen invloed op het resultaat. De relevante records worden toch verwijderd.

Update: Velden die worden weergegeven in de Merge LOAD worden bijgewerkt in de doeltabel. Ontbrekende velden worden niet gewijzigd. Dit betekent dat de twee volgende opdrachten niet identiek zijn:

  • Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
  • Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;

Met de eerste opdracht worden de weergegeven records bijgewerkt en F2 gewijzigd in NULL. Bij de tweede opdracht wordt F2 niet gewijzigd, maar blijven de waarden van de doeltabel behouden.