我正在研究管理第三方OLAP服务的每周数据馈送的最佳实践。分析数据库将使用完整数据转储进行初始化。随后的每周Feed将提供新的和更新的行。数据来自SQL Server 2005数据库。
检测新行和更新行的首选方法是什么?
在插入和更新时触发修改后的日期字段,并抓取大于上次提取的内容;或
源表上的timestamp列,抓取时间戳大于上次Feed提取的行;或
我没有想到的一些好主意...
答案 0 :(得分:2)
这取决于您如何定义更改的行。
Number 2有效,但对该行的任何更改都将更改时间戳,即使是实际上没有更改任何内容的更新(例如将值从1更新为1)。听起来很傻谁会这样做?但是当你使用动态代码时很容易做到。
可以修改数字1以确保触发器中插入表和已删除表之间存在差异并修复选项2的问题。
但是,假设您有三个不同的Feed,每个Feed都包含可能位于相关表中的不同列,并且您只想在其中一个实际发生更改时发送。现在,触发器对您的Feed来说不够具体。我们使用更改数据跟踪来识别自上次发送日期以来哪些行已更改(我们将其存储为所有SSIS pacakges的一部分),然后计算特定列的rowhash数据以查看我们感兴趣的数据是否实际更改。我还看到人们使用发送内容的历史表,然后将这些值(如果您只对表中的一个或两个字段感兴趣)与更改数据跟踪表中实际更改的值进行比较。如果你有这个特定的要求,你最终会得到一个非常复杂的系统来支持它(我只是给你一个粗略的想法)。
答案 1 :(得分:1)