Перейти к основному содержимому

Merge

Префикс Merge может быть добавлен к любому оператору LOAD или SELECT в скрипте для указания, что загруженная таблица должна быть объединена с другой таблицей. Он также указывает, что этот оператор следует выполнять в частичной перезагрузке.

Типичный вариант использования — вы загружаете журнал изменений и хотите использовать его для применения inserts, updates и deletes к существующей таблице.

Выполните частичную перезагрузку с помощью кнопки Перезагрузить. Для получения дополнительной информации см. Кнопка. Можно также использовать Qlik Engine JSON API.

Для выполнения частичной перезагрузки по графику щелкните More на приложении и выберите Запланировать перезагрузку. В открывшемся диалоговом окне включите параметр Частичная перезагрузка.

Syntax:  

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

 

Во время обычной (не частичной) перезагрузки конструкция Merge LOAD будет работать как обычный оператор Load, но с дополнительной функциональностью для удаления устаревших записей и записей, отмеченных на удаление. Первое поле оператора Load должно содержать информацию об операции: Insert, Update или Delete.

Идентификатор каждой загруженной записи будет сравниваться с ранее загруженными записями, и только последняя запись (согласно порядковому номеру) будет сохранена. Если последняя запись отмечена как Delete, она не будет сохраняться.

Если используется префикс Concatenate или там уже будет существовать таблица с тем же набором полей, соответствующая таблица будет изменена. Иначе результат конструкции Merge LOAD будет сохранен в новой таблице.

Если применяется префикс Concatenate, в результирующей таблице может быть больше полей, чем в журнале изменений, используемом в качестве ввода для Merge.

Частичная перезагрузка сделает то же самое, что и полная перезагрузка. Единственная разница заключается в том, что конструкция Merge LOAD никогда не создаст новую таблицу. Там всегда существует соответствующая таблица из предыдущего выполнения скрипта, которая должна быть изменена.

Если загруженный журнал изменений является накапливаемым, то есть уже содержит ранее загруженные изменения, параметр SequenceNoVar может использоваться в предложении Where для ограничения объема входных данных. Тогда конструкция Merge LOAD может загружать только записи, в которых поле SequenceNoField больше, чем SequenceNoVar. После завершения Merge LOAD присвоит новое значение полю SequenceNoVar с максимальным значением в поле SequenceNoField.

Arguments:  

Аргументы
Аргумент Описание
only Дополнительный классификатор, указывающий на то, что оператор следует выполнять только во время частичных перезагрузок. Его следует игнорировать во время обычных (не частичных) перезагрузок.
SequenceNoField Имя поля, содержащего метку времени или порядковый номер, который определяет порядок операций.
SequenceNoVar

Имя переменной, которой присваивается максимальное значение для SequenceNoField в объединяемой таблице.

ListOfKeys Список разделенных запятой имен полей, указывающих первичный ключ.
operation Первое поле оператора Load должно содержать операцию: Insert, Update или Delete. ‘i’, ‘u’ и ‘d’ также принимаются.

Example: Скрипт загрузки данных

В этом примере во встроенную таблицу с именем Persons загружаются четыре строки. Затем Merge изменяет таблицу следующим образом:

  • Добавляет строку Mary, 4
  • Удаляет строку Steven, 3
  • Присваивает число 5 строке Jake

Для переменной LastChangeDate будет установлено максимальное значение в столбце ChangeDate после выполнения Merge.

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

До загрузки Merge результирующая таблица выглядит следующим образом.

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

После загрузки Merge таблица выглядит следующим образом.

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

Когда данные загружены, диалоговое окно Выполнение загрузки данных показывает выполняемые операции.

Диалоговое окно «Выполнение загрузки данных»

Data load progress dialog box.

Example: Скрипт загрузки данных — частичная перезагрузка

В следующем примере аргумент Only указывает, что команда Merge будет выполняться только во время частичной перезагрузки. Обновления будут фильтроваться на основе ранее полученной переменной LastChangeDate. После завершения команды Merge переменной LastChangeDate будет присвоено максимальное значение столбца ChangeDate, обработанного во время слияния

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