我正在尝试编写一条语句,该语句使用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语法工作。
谢谢。
答案 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系统提取新数据的非常有效且可靠的策略。