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

Merge

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

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

Примечание об информацииЧтобы частичная перезагрузка работала правильно, приложение должно быть открыто с данными до ее запуска.

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

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

Синтаксис:  

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

Аргументы:  

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

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

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

Общая функциональность

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

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

Целевая таблица

Набор полей определяет, в какую таблицу будут вноситься изменения. Если таблица с таким же набором полей (кроме первого поля; операции) уже существует, это будет релевантная таблица для изменения. Также можно использовать префикс Concatenate, чтобы задать таблицу. Если целевая таблица не определена, результат конструкции Merge LOAD сохраняется в новой таблице.

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

При частичной перезагрузке происходит то же самое, что и при полной. Единственное отличие заключается в том, что при частичной перезагрузке редко создается новая таблица. Если не использовано предложение Only, всегда существует целевая таблица с таким же набором полей от предыдущего выполнения скрипта.

Порядковый номер

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

Операции

Merge LOAD может иметь меньше полей, чем целевая таблица. При выполнении различных операций отсутствующие поля обрабатываются по-разному:

Insert: поля, отсутствующие в Merge LOAD, но существующие в целевой таблице, получают значение NULL в целевой таблице.

Delete: Отсутствующие поля не влияют на результат. релевантные записи удаляются в любом случае.

Update: поля, перечисленные в Merge LOAD, обновляются в целевой таблице. Отсутствующие поля не изменяются. Это означает, что два следующих оператора не являются идентичными:

  • Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
  • Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;

Первый оператор обновляет перечисленные записи и изменяет F2 на NULL. Второй оператор не изменяет F2, но оставляет прежние значения в целевой таблице.