Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 跨流数据更改-EDW_Sql Server 2008_Triggers_Data Warehouse - Fatal编程技术网

Sql server 2008 跨流数据更改-EDW

Sql server 2008 跨流数据更改-EDW,sql-server-2008,triggers,data-warehouse,Sql Server 2008,Triggers,Data Warehouse,我得到了一个场景,其中数据流B依赖于数据流a。每当数据流a发生变化时,都需要重新处理流B。因此,需要一个公共流程来识别跨数据流的变化并触发重新处理任务。 除了触发器之外,还有什么好方法可以做到这一点。您的问题相当不清楚,我认为任何答案都在很大程度上取决于您的数据外观、加载方式、如何识别更改、是否需要向用户显示一个事实或维度值的多个版本等 以下是我们如何处理它的简短描述,它可能对您有帮助,也可能对您没有帮助: 我们每天递增地加载原始数据,也就是说,我们加载源系统中过去24小时内生成的所有数据(我忽

我得到了一个场景,其中数据流B依赖于数据流a。每当数据流a发生变化时,都需要重新处理流B。因此,需要一个公共流程来识别跨数据流的变化并触发重新处理任务。
除了触发器之外,还有什么好方法可以做到这一点。

您的问题相当不清楚,我认为任何答案都在很大程度上取决于您的数据外观、加载方式、如何识别更改、是否需要向用户显示一个事实或维度值的多个版本等

以下是我们如何处理它的简短描述,它可能对您有帮助,也可能对您没有帮助:

  • 我们每天递增地加载原始数据,也就是说,我们加载源系统中过去24小时内生成的所有数据(我忽略了时间问题,但它们在这里并不重要)
  • 我们将原始数据插入加载表;该表已经包含我们以前从同一源加载的所有数据
  • 如果行是全新的(即原始数据中的PK值是新的),则正常处理这些行
  • 如果我们在表中找到一行已经有PK,我们就知道它是我们已经处理过的数据的更新版本
  • 当我们找到更新的数据时,我们将其标记为特殊处理,并根据它重新生成任何数据(这都是在存储过程中完成的)
  • 我想你是在问如何执行第5步,但这取决于发生变化的数据和用户期望发生的情况。例如,如果订单中的一个项目发生更改,我们将重新处理整个订单,以确保订单级别的值是正确的。如果客户地址发生变化,我们必须将其重新分配到新的销售区域

    没有通用的方法来识别和处理数据更改,因为每个人的数据和需求都不同,每个人都有不同的工具集和不同的约束等等


    如果你能让你的问题更具体,那么也许你会得到更好的答案,例如,如果你已经有了一个基于触发器的工作解决方案,那么你为什么要改变?您有什么问题让您寻找替代方案?

    您所说的“数据流”是什么意思?您到底是如何将数据加载到数据库中的?当一个流“改变”时,它意味着什么?数据流是一组与特定主题领域相关的数据文件。加载是通过ETL过程完成的。两个数据流分别加载。但当流B被加载时,将对流A执行查找以进行一些验证。在后期的情况下,如果对现有数据流A(通过后续加载)有任何修改,则应该有某种触发器来捕获流A中的更改并重新处理流B。