如何在每次ETL运行时使用SQL编写基本ETL而不截断/加载



我有一个OLTP数据库,我正在使用SQL(ETL(将其加载到另一个数据库中。为此,在第二个数据库数据库中,我创建了基于事实和维度的星形模式模型。

技术:MS-SQL

事实:销售

维度:客户、客户、代理

注意:源系统中没有日期修改字段,并且可以在源系统中删除行。

我有一个每15分钟运行一次的代理作业,用于执行以下操作:对于每个表,我将数据从OLTP数据库加载到相应的暂存表中(对于每个维度和事实表(。然后将暂存调光表合并到调光表中。然后更新临时事实表以包含维度的代理项键。然后使用merge将临时事实数据表与事实数据表同步。这很耗费资源,因为我必须在每次etl运行时将整个数据加载到暂存表中。所以我正在寻找一种更好的方法——如果有人能告诉我它是如何做到的,这将对我有所帮助

这很消耗资源,因为我必须在每次etl运行时将整个数据加载到暂存表中

  1. 在源位置启用"更改跟踪"或"更改数据捕获",仅提取更改的行

  1. 在DW服务器上使用从源到暂存表的事务复制或使用读取规模副本或日志传送创建可读副本