在Qlik Sense上执行增量负载

时间:2019-05-06 11:16:39

标签: business-intelligence qliksense incremental-build

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 个答案:

答案 0 :(得分:1)

在第一个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存储在数据模型中没有任何意义,因此您可以命名该表:

[TEMP_deleted_ids]
SELECT sale_detail_auto_id` AS `deleted_sale_detail_auto_id`

,然后在脚本末尾将其删除:

DROP Table [TEMP_deleted_ids];