云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

文件存储_数据库负载均衡方案_促销

小七 141 0

将数据从源系统批量加载到数据集市或数据仓库时,通常会寻找减少要提取的数据集的方法,以最小化提取时间和资源消耗。理想情况下,有一种只提取更改记录的方法,例如,使用更改日期列。然而,这并不总是飞。例如,生态环境大数据,更改日期列并不总是可靠的,或者在源表中也不总是跟踪删除。另一种方法是从批处理切换到日志,或者在源代码上触发复制,但您并不总是拥有这种特权。因此,现在您必须加载整个源数据集,但仍然需要标识更改数据,以便只处理下游数据流中的增量。如何使用批量加载识别这些更改数据?

在本博客中,我将解释如何使用SAP Web IDE for HANA中的智能数据集成(SDI)流程图来识别增量数据集。流程图用于写入所谓的changelog表。在这个博客中,只填充了changelog表。一旦你有了变更数据,如何在下游数据流中使用它就取决于你了。在早期或更高版本中,或在Web IDE中,CF的完整堆栈、UI或行为可能与此处描述的不同。

将使用以下用例,这是一位客户最近向我描述的:

源表是在外部数据库中,通过SDI连接到SAP HANA SQL DW。相当大,但没有字段告诉我们数据是否已更改或删除。比较表(需要与源表进行比较的表)使用有效性时间戳跟踪所有更改的历史记录与源具有不同的列名由一个只希望更改记录作为输入的工具填充

您可能想知道本机数据存储对象(NDSO)是否是解决此问题的候选对象。毕竟,NDSO提供了一种现成的delta机制。然而,正是目标表的三个特性放弃了这个选项,因此我们使用SDI流程图转换来解决这个用例,它花费了更多的时间来构建,但是允许更多的灵活性。

源表定义如下:

图1:源表

比较表(源表需要的表)与之比较)定义如下。如您所见,列"ValidityFrom"是键的一部分,它与"ValidityTo"列一起跟踪数据集的历史。另外,还有一个字段"SalesRename",它应该与源表的字段"Sales"进行比较。

图2:比较表

首先,我们需要定义一个存储更改数据的changelog表。最初,只需要一个表来标识每个单独运行的更改数据,因此我们不需要存储changelog历史。

changelog表定义如下。它的结构与源类似,除了重命名的字段,以及两个添加的字段,淘客单,它们指示更改类型(I表示插入,U表示更新,D表示删除)和ChangeTime(流程图检测到更改时的时间戳)。请注意,如果要构造changelog,流程图将需要这样的字段,尽管您可以自由地将ChangeTime列更改为日期格式或完全忽略它,并且只使用ChangeType列。我更喜欢使用ChangeTime列来确定我在changelog表中看到的结果。

图3:应该包含"变更数据"的changelog表

流程图需要四个节点,如下图所示。

图4:创建流程图的主视图

第一个节点是数据源,不需要进一步解释。第二个节点用于重命名传入字段以与我们要比较的表匹配。因为在我们的源代码中有一个字段"Sales",在与之比较的表中有一个字段"SalesRename","Sales"字段被重命名为"SalesRename"。请注意,此时应进行任何重命名。不能重命名表比较节点本身中的字段,表比较节点希望源和比较表中的字段相同。

图5:重命名投影节点中的字段

在源屏幕上的表比较节点中,首先选择要比较的表。执行此操作后,该表的字段将显示在右侧(除了通知您该表的定义之外,没有其他用途)。"生成的键属性"为空。仅当您希望比较表在比较条件上有重复项,并且比较表有代理项时,才需要此选项。在这种情况下,选择具有最大代理键的记录进行比较。

由于比较表跟踪数据集的历史记录,比较应仅在"当前"记录上进行。在本例中,这些记录的ValidityTo时间戳等于"9999-12-31 23:59:59"。另外,由于源可以删除记录,老虎淘客,并且这些记录应该被跟踪,所以选中了"删除行检测"复选框。请注意,此选项会减慢操作速度,因此仅在必要时使用。

图6:比较表设置在表比较节点

在属性部分,默认不显示任何字段,这意味着比较将在源表的所有字段上进行。如果不想比较所有这些字段,可以添加比较所需的字段。要比较的字段越少,操作就越快。

主键复选框表示比较所基于的字段。在示例用例中,这是SalesOrderID,因此默认选择是正确的。

图7:表比较节点中的源表设置

在目标节点中,ChangeType和ChangeTime列保留为空。它们将在设置面板中填写。

图8:目标节点中的Changelog表映射