在 Qlik Sense 上执行增量加载

Perform Incremental Load On Qlik Sense

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 中获取不在已删除记录中的数据?

首先 SELECT 您 select sale_detail_auto_id 字段也存在于新记录和更新记录中的相同字段名下,因此您会看到已删除的 ID 和新的 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);

更新:

此外,我认为将已删除的 ID 存储在数据模型中没有意义,因此您可以将其命名为 table:

[TEMP_deleted_ids]
SELECT sale_detail_auto_id` AS `deleted_sale_detail_auto_id`

然后在脚本末尾删除它:

DROP Table [TEMP_deleted_ids];