Zu Hauptinhalt springen

Merge

AUF DIESER SEITE

Merge

Der Zusatz Merge kann zu jedem LOAD- oder SELECT-Befehl im Skript hinzugefügt werden, um anzugeben, dass die geladene Tabelle mit einer anderen Tabelle zusammengeführt werden soll. Er gibt auch an, dass dieser Befehl in einem partiellen Ladevorgang ausgeführt werden soll.

In einem typischen Fall laden Sie ein Änderungsprotokoll und möchten es verwenden, um inserts, updates und deletes auf eine vorhandene Tabelle anzuwenden.

Hinweis: Partielle Ladevorgänge werden bei Verwenden von Qlik Engine JSON API oder über die Schaltfläche Laden unterstützt. Weitere Informationen zur Schaltfläche Laden finden Sie unter Schaltfläche.

Syntax:  

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

 

Während eines normalen (nicht partiellen) Ladevorgangs funktioniert die Konstruktion Merge LOAD als normaler Load-Befehl, aber mit der zusätzlichen Funktion, dass ältere obsolete Datensätze und für die Löschung vorgemerkte Datensätze entfernt werden. Das erste Feld des load-Befehls muss Informationen zum Vorgang enthalten: Insert, Update oder Delete.

Für jeden geladenen Datensatz wird der Datensatzidentifikator mit den zuvor geladenen Datensätzen verglichen, und nur der neueste Datensatz (entsprechend der Sequenznummer) wird beibehalten. Wenn der neueste Datensatz mit Delete markiert ist, wird keiner beibehalten.

Wenn der Zusatz Concatenate verwendet wird oder wenn eine Tabelle mit dem gleichen Satz Felder vorhanden ist, werden die Datensätze an die relevante zu ändernde Tabelle angehängt. Andernfalls wird das Ergebnis der Konstruktion Merge LOAD in einer neuen Tabelle gespeichert.

Wenn der Zusatz Concatenate verwendet wird, kann die Ergebnistabelle mehr Felder als das Änderungsprotokoll enthalten, das als Eingabe für Merge verwendet wird.

Ein partieller Ladevorgang hat die gleiche Wirkung wie ein vollständiger Ladevorgang. Der einzige Unterschied besteht darin, dass mit der Konstruktion Merge LOAD nie eine neue Tabelle erstellt wird. Es ist immer eine relevante Tabelle aus der vorherigen Skriptausführung für die Änderung vorhanden.

Wenn es sich bei dem geladenen Änderungsprotokoll um ein kumuliertes Protokoll handelt, das bereits geladene Änderungen enthält, kann der Parameter SequenceNoVar in einem Where-Befehl verwendet werden, um die Menge der Eingabedaten zu begrenzen. Merge LOAD kann dann nur zum Laden von Datensätzen angewendet werden, in denen das Feld SequenceNoField größer als SequenceNoVar ist. Nach Abschluss weist Merge LOAD einen neuen Wert zu SequenceNoVar zu, wobei der Wert im Feld SequenceNoField der Höchstwert ist.

Arguments:  

Argumente
Argument Beschreibung
only Ein optionaler Qualifizierer, der bewirkt, dass der Befehl nur bei der partiellen Ausführung des Skripts berücksichtigt wird. Bei normalen (nicht partiellen) Ladevorgängen sollte er ignoriert werden.
SequenceNoField Der Name des Felds, das einen Zeitstempel oder eine Sequenznummer enthält, die die Vorgangsreihenfolge bestimmt.
SequenceNoVar

Der Name der Variablen, der ein Höchstwert für SequenceNoField in der zusammenzuführenden Tabelle zugewiesen wird.

ListOfKeys Eine kommagetrennte Liste von Feldnamen, die den Primärschlüssel angeben.
operation Das erste Feld des load-Befehls muss folgende Operation enthalten: Insert, Update oder Delete. „i“, „u“ und „d“ werden ebenfalls akzeptiert.

Example: Datenladeskript

In diesem Beispiel wird eine Inline-Tabelle mit dem Namen Persons mit vier Zeilen geladen. Merge ändert dann die Tabelle wie folgt:

  • Fügt die Zeile Mary, 4 hinzu
  • Löscht die Zeile Steven, 3
  • Weist die Nummer 5 zu Jake zu

Die Variable LastChangeDate wird auf den Höchstwert in der Spalte ChangeDate festgelegt, nachdem Merge ausgeführt wurde.

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

Vor dem Merge load sieht die Ergebnistabelle wie folgt aus:

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Nach dem Merge load sieht die Ergebnistabelle wie folgt aus:

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

Wenn die Daten geladen werden, zeigt das Dialogfeld Datenladefortschritt die durchgeführten Vorgänge an:

Dialogfeld „Datenladefortschritt“

Data load progress dialog box.

Example: Datenladeskript – Partielles Laden

Im folgenden Beispiel gibt das Argument Only an, dass der Befehl Merge nur während eines partiellen Ladevorgangs ausgeführt wird. Aktualisierungen werden gestützt auf das zuvor erfasste LastChangeDate gefiltert. Nachdem Merge abgeschlossen ist, wird die Variable LastChangeDate dem Höchstwert der Spalte ChangeDate zugewiesen, die während der Zusammenführung verarbeitet wurde.

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