Выполнить инкрементальную нагрузку на Qlik Sense - PullRequest
1 голос
/ 06 мая 2019

Впервые в Qlik Sense.

Я хотел бы выполнить инкрементную вставку, обновление и удаление. Благодаря исследованиям мне удалось написать этот сценарий

//This fetches deleted records
SELECT `sale_detail_auto_id` 
FROM `iprocure_ods.deleted_records` as dr
INNER JOIN `iprocure_ods.saledetail` sd ON sd.sale_detail_auto_id = dr.identifier AND dr.type = 2 
WHERE dr.delete_date > TIMESTAMP('$(vSaleTransactionsRunTime)');

//This fetches new and updated records
[sale_transactions]:
SELECT *
FROM `iprocure_edw.sale_transactions`
WHERE `server_update_date` > TIMESTAMP('$(vSaleTransactionsRunTime)');

Concatenate([sale_transactions])
LOAD *
FROM [lib://qlikPath/saletransactions.qvd] (qvd) Where Not Exists(`sale_detail_auto_id`);

//This part updates runtime dates
MaxUpdateDate:
LOAD Timestamp(MAX(`server_update_date`), '$(TimestampFormat)') As maxServerUpdateDate
FROM [lib://qlikPath/saletransactions.qvd] (qvd);
Let vSaleTransactionsRunTime = peek('maxServerUpdateDate', 0, MaxUpdateDate);
DROP Table MaxUpdateDate;

Новые и обновленные записи работают нормально. Проблема в том, что удаленные записи заменяются пустым столбцом, кроме столбца sale_detail_auto_id.

Как я могу получить данные из saletransactions.qvd, которых нет в удаленных записях?

1 Ответ

1 голос
/ 06 мая 2019

В первом SELECT вы выбираете sale_detail_auto_id полей, которые также существуют под тем же именем поля в новых и обновленных записях, поэтому вы видите удаленные идентификаторы вместе с новыми. Вам нужно переименовать этот столбец, чтобы избежать конфликта.

Пожалуйста, используйте AS, например:

sale_detail_auto_id` AS `deleted_sale_detail_auto_id`

и затем в EXISTS используйте это поле:

Where Not Exists(deleted_sale_detail_auto_id, sale_detail_auto_id);

ОБНОВЛЕНИЕ:

Кроме того, я думаю, что не имеет смысла хранить удаленные идентификаторы в модели данных, поэтому вы можете назвать эту таблицу:

[TEMP_deleted_ids]
SELECT sale_detail_auto_id` AS `deleted_sale_detail_auto_id`

и затем в конце скрипта удалите его:

DROP Table [TEMP_deleted_ids];
...