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.

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 More in een app en kiest u vervolgens Schema lading. In het dialoogvenster dat wordt geopend, schakelt u Gedeeltelijke lading in.

Syntax:  

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

 

Tijdens een normale (niet-gedeeltelijke) lading zal de constructie Merge LOAD worden uitgevoerd als een normale laad-instructie, maar zorgt dit ook voor de verwijdering van verouderde records en records die zijn gemarkeerd voor verwijdering. Het eerste veld van de laadinstructie 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.

Als het voorvoegsel Concatenate is gebruikt of is een tabel aanwezig met dezelfde verzameling van velden, worden de records toegevoegd aan de relevante bestaan de tabel. Anders wordt het resultaat van de constructie Merge LOAD in een nieuwe tabel opgeslagen.

Als het voorvoegsel Concatenate is gebruikt, is het mogelijk dat de resulterende tabel meer velden bevat dan het wijzigingslogboek dat is gebruikt als invoer voor Merge.

Bij een gedeeltelijke lading gebeurt hetzelfde als bij een volledige lading. Het enige verschil is dat de bij de constructie Merge LOAD nooit een nieuwe tabel wordt gemaakt. Er bestaat altijd een relevante tabel van de uitvoering van het vorige script dat moet worden aangepast.

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 zal de constructie Merge LOAD een nieuwe waarde toewijzen aan de SequenceNoVar met de maximumwaarde die te zien is in het veld SequenceNoField.

Arguments:  

Argumenten
Argument Beschrijving
only Een optionele kwalificatie die aangeeft dat de opdracht alleen moet worden uitgevoerd tijdens het gedeeltelijk laden van gegevens. Het moet worden 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 laadinstructie moet informatie over de bewerking bevatten: Insert, Update of Delete. ‘i’, ‘u’ en ‘d’ worden ook geaccepteerd.

Example: Load-script voor gegevens

In dit voorbeeld wordt een uitgelijnde tabel met vier rijen met de naam Persons geladen. Met Merge wordt de tabel als volgt gewijzigd:

  • De rij Mary, 4 wordt toegevoegd
  • De rij Steven, 3 wordt verwijderd
  • Het getal 5 wordt toegewezen aan Jake

De variabele LastChangeDate wordt ingesteld op de maximumwaarde in de kolom ChangeDate nadat Merge is uitgevoerd.

Persons: load * inline [ Name, Number Jake, 3 Jill, 2 Steven, 3 ]; Merge (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD * inline [ Operation, ChangeDate, Name, Number Insert, 1/1/2021, Mary, 4 Delete, 1/1/2021, Steven, Update, 2/1/2021, Jake, 5 ];

Voorafgaand aan de lading Merge verschijnt de volgende tabel:

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Na de lading Merge verschijnt de volgende tabel:

Resulting table
ChangeDate Name Number
2/1/2021 Jake 5
- Jill 2
1/1/2021 Mary 4

Als de gegevens zijn geladen toont het dialoogvenster Voortgang laden van gegevens de bewerkingen die worden uitgevoerd:

Dialoogvenster Voortgang laden van gegevens

Data load progress dialog box.

Example: Load-script voor gegevens - gedeeltelijke lading

In het volgende voorbeeld, geeft het argument Only op dat de instructie Merge alleen wordt uitgevoerd tijdens een gedeeltelijke lading. Updates worden gefilterd op basis van de eerder vastgelegde LastChangeDate. Nadat Merge is voltooid, wordt de variabel LastChangeDate toegewezen aan de maximumwaarde van de kolom ChangeDate die tijdens het samenvoegen is verwerkt

Merge Only (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD Operation, ChangeDate, Name, Number from [lib://ChangeFilesFolder/BulkChangesInPersonsTable.csv] (txt) where ChangeDate >= $(LastChangeDate);