如何使用TIMESTAMP进行增量加载?

时间:2018-11-27 07:45:46

标签: sql sql-server

我正在尝试编写一条语句,该语句使用ELT工具(WhereEscape)从预订系统(Sql)的数据库向数据仓库进行增量加载。我要写的是一个where子句,用于检查新记录是否比最后一次添加到仓库的记录更新了TIMESTAMP(在预订时自动创建的列)。

我使用了以下语句:

WHERE EV290_EXHIBITORS.EV290_ENT_STAMP > 
LOAD_EBMS_EV290_EXHIBITORS.EV290_ENT_STAMP 

并且:

WHERE EV290_EXHIBITORS.EV290_ENT_STAMP > (SELECT EV290_ENT_STAMP FROM LOAD_EBMS_EV290_ENT_STAMP)

值得一提的是,所有正在使用的工具(ELT工具和仓库)都使用SQL Server语法工作。

谢谢。

2 个答案:

答案 0 :(得分:1)

您应该在ETL解决方案中处理此问题。

第1步:查询目标表以获取最新时间戳。

第2步:在ETL程序包中,将此值作为参数传递到源存储过程中

例如

WHERE EV290_EXHIBITORS.EV290_ENT_STAMP > @maxTimestamp

第3步:将数据插入目标表中。

我也建议您将时间戳记稍作回去,以重叠您的负载(DATEADD(MINUTE,-30,@maxTimestamp)),以便您始终重新加载一些数据,以确保您可以捕获任何迟到的数据然后,您将需要单独的INSERT / UPDATE语句或MERGE语句来插入数据。

替代步骤3:将结果数据加载到目标数据库中的工作表中,然后将UPDATE / INSERT或MERGE加载到目标表中。

编辑 但是,要直接回答您的问题,您需要将查询更改为:

WHERE EV290_EXHIBITORS.EV290_ENT_STAMP > (SELECT MAX(EV290_ENT_STAMP) FROM LOAD_EBMS_EV290_ENT_STAMP)

答案 1 :(得分:0)

初始加载后,ETL应该递增。

按设计,DWH系统比OLTP系统存储的数据范围更广,因此并非所有数据都在OLTP系统上可用。

秘密在于如何识别必须从OLTP转移到DWH登台表的内容,您创建/更新的行时间戳是从OLTP系统提取新数据的非常有效且可靠的策略。