Przeskocz do zawartości głównej

Merge

NA TEJ STRONIE

Merge

Do dowolnej instrukcji LOAD lub SELECT w skrypcie można dodać prefiks Merge, aby określić, że ładowana tabela powinna zostać scalona w innej tabeli. Określa on również, że ta instrukcja powinna być uruchamiana podczas częściowego ładowania.

Typowym użyciem jest załadowanie dziennika zmian i wykorzystanie go do zastosowania inserts, updates oraz deletes do istniejącej tabeli.

Uwaga: Częściowe ładowanie jest obsługiwane przy użyciu Qlik Engine JSON API albo przycisku Ładuj. Więcej informacji na temat przycisku Ładuj zawiera temat Przycisk.

Syntax:  

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

 

Podczas normalnego (nie częściowego) ładowania konstrukcja Merge LOAD będzie działać jako normalna instrukcja Load, ale z dodatkową funkcjonalnością polegającą na usuwaniu starszych, zbędnych rekordów oraz rekordów oznaczonych do usunięcia. Pierwsze pole instrukcji load musi zawierać informacje o operacji: Insert, Update lub Delete.

W przypadku każdego załadowanego rekordu identyfikator rekordu zostanie porównany z wcześniej załadowanymi rekordami i zachowany zostanie tylko najnowszy rekord (zgodnie z numeracją). Jeśli najnowszy rekord jest oznaczony Delete, żadne rekordy nie zostaną zachowane.

Jeśli będzie używany prefiks Concatenate lub jeśli będzie istnieć tabela z tym samym zestawem pól, będzie to odpowiednia tabela do zmodyfikowania. W przeciwnym razie wynik konstrukcji Merge LOAD zostanie zapisany w nowej tabeli.

Jeśli będzie używany prefiks Concatenate, wynikowa tabela może mieć więcej pól niż dziennik zmian, który jest używany jako dane wejściowe dla polecenia Merge.

Częściowe ładowanie da takie same rezultaty jak pełne. Jedyna różnica polega na tym, że konstrukcja Merge LOAD nigdy nie utworzy nowej tabeli. Zawsze istnieje odpowiednia tabela z poprzedniego wykonania skryptu do zmodyfikowania.

Jeśli załadowany dziennik zmian jest dziennikiem akumulowanym, to znaczy zawiera zmiany, które zostały już załadowane, można użyć parametru SequenceNoVar w klauzuli Where w celu ograniczenia ilości danych wejściowych. Konstrukcji Merge LOAD można wówczas użyć do załadowania tylko rekordów, w których wartość pola SequenceNoField jest większa niż SequenceNoVar. Po zakończeniu konstrukcja Merge LOAD przypisze nową wartość do SequenceNoVar z maksymalną wartością widoczną w polu SequenceNoField.

Arguments:  

Argumenty
Argument Opisu
only Opcjonalny kwalifikator wskazujący, że instrukcja ma być wykonywana tylko podczas częściowego ładowania. Należy go pominąć podczas normalnych (nie częściowych) ładowań.
SequenceNoField Nazwa pola zawierającego znacznik czasu lub numer kolejny, który definiuje kolejność operacji.
SequenceNoVar

Nazwa zmiennej, której przypisywana jest maksymalna wartość SequenceNoField scalanej tabeli.

ListOfKeys Lista nazw pól oddzielonych przecinkami, określająca klucz podstawowy.
operation Pierwsze pole instrukcji load musi zawierać operację: Insert, Update lub Delete. „i”, 'u” i „d”są również akceptowane.

Example: Skrypt ładowania danych

W tym przykładzie tabela z danymi wpisanymi w skrypcie o nazwie Persons jest ładowana z czterema wierszami. Polecenie Merge następnie zmienia tabelę w następujący sposób:

  • Dodaje wiersz Mary, 4
  • Usuwa wiersz Steven, 3
  • Przypisuje liczbę 5 do Jake

Po wykonaniu polecenia Merge zmienna LastChangeDate ma ustawioną maksymalną wartość w kolumnie ChangeDate.

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

Przed załadowaniem tabeli przy użyciu polecenia Merge wynikowa tabela wygląda następująco:

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Po załadowaniu tabeli przy użyciu polecenia Merge tabela wygląda następująco:

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

Podczas ładowania danych okno dialogowe Postęp ładowania danych przedstawia wykonywane operacje:

Okno dialogowe Postęp ładowania danych

Data load progress dialog box.

Example: Skrypt ładowania danych — częściowe ładowanie

W poniższym przykładzie argument Only określa, że polecenie Merge zostanie wykonane tylko podczas częściowego ładowania. Aktualizacje będą filtrowane na podstawie wcześniej przechwyconych wartości zmiennej LastChangeDate. Po zakończeniu wykonywania polecenia Merge zmiennej LastChangeDate zostanie przypisana maksymalna wartość ChangeDate kolumny przetwarzanej podczas scalania

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