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