Gå till huvudinnehåll

Merge

PÅ DEN HÄR SIDAN

Merge

Merge-prefixet kan adderas till valfri LOAD- eller SELECT-sats i skriptet för att specificera att den laddade tabellen ska slås samman med en annan tabell. Det specificerar även att satsen ska köras i en delvis laddning.

Används ofta när du laddar en ändringslogg och vill använda denna för att tillämpa inserts, updates och deletes på en befintlig tabell.

Observera: Du kan göra delvisa laddningar med Qlik Engine JSON API eller knappen Ladda. Mer information om knappen Ladda finns i Knapp.

Syntax:  

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

 

Vid en vanlig (ej delvis) laddning fungerar konstruktionen Merge LOAD som en vanlig LOAD-sats, med tillägget att äldre, obsoleta poster tas bort, liksom poster som markerats för borttagning. Det första fältet i LOAD-satsen måste innehålla information om operationen: Insert, Update eller Delete.

För varje post som laddas jämförs postens identifierare med poster som laddats tidigare, och bara den senaste posten (enligt ordningstalet) sparas. Om den senaste posten har en Delete-markering sparas inte någon.

Om Concatenate-prefixet används, eller om det redan finns en tabell med samma uppsättning fält, blir detta den tabell som ska ändras. Annars sparas resultatet av konstruktionen Merge LOAD i en ny tabell.

Om Concatenate-prefixet används kan den resulterande tabellen ha fler fält än den ändringslogg som används som indata för Merge.

En delvis laddning gör samma sak som en fullständig laddning. Den enda skillnaden är att konstruktionen Merge LOAD aldrig skapar en ny tabell. Det finns alltid en relevant tabell att ändra, från föregående skriptexekvering.

Om den laddade ändringsloggen är en ackumulerad logg, det vill säga innehåller ändringar som redan har laddats, kan parametern SequenceNoVar användas i en Where-sats för att begränsa mängden indata. Då kan Merge LOAD formuleras så att bara poster där fältet SequenceNoField är större än SequenceNoVar laddas. När exekveringen är klar tilldelar Merge LOAD ett nytt värde till SequenceNoVar med det största värde som finns i fältet SequenceNoField.

Arguments:  

Argument
Argument Beskrivning
only En valfri kvalificerare som innebär att satsen bara ska exekveras vid delvisa laddningar. Den ska ignoreras vid vanliga (ej delvisa) laddningar.
SequenceNoField Namnet på det fält som innehåller en tidsmarkör eller ett ordningstal som definierar ordningen för operationerna.
SequenceNoVar

Namnet på den variabel som blir tilldelad det högsta värdet för SequenceNoField i tabellen som slås ihop.

ListOfKeys En kommaavgränsad lista med fältnamn som specificerar den primära nyckeln.
operation Det första fältet i LOAD-satsen måste innehålla operationen: Insert, Update eller Delete. ’i’, ’u’ och ’d’ accepteras också.

Example: Dataladdningsskript

I det här exemplet laddas en inline-tabell med namnet Persons med fyra rader. Sedan ändrar Merge tabellen på följande sätt:

  • Lägger till raden Mary, 4
  • Tar bort raden Steven, 3
  • Tilldelar talet 5 till Jake

Variabeln LastChangeDate anges som det högsta värdet i kolumnen ChangeDate efter att Merge har exekverats.

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

Före Merge-laddningen ser tabellen ut så här:

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Efter Merge-laddningen ser tabellen ut så här:

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

När data laddas visas operationerna som utförs i dialogrutan Dataladdning:

Dataladdningsdialogrutan

Data load progress dialog box.

Example: Dataladdningsskript – delvis laddning

I följande exempel specificerar Only-argumentet att Merge-kommandot bara ska exekveras vid en delvis laddning. Uppdateringar kommer att filtreras utifrån det tidigare beskrivna LastChangeDate. När Merge är klart kommer LastChangeDate-variabeln att tilldelas det största värdet i kolumnen ChangeDate, som bearbetats under sammanslagningen.

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