【问题标题】:Detecting delta records for nightly capture?检测增量记录以进行夜间捕获?
【发布时间】:2018-01-10 16:13:02
【问题描述】:

我有一个现有的 HANA 仓库,它是在没有创建/更新时间戳的情况下构建的。我需要生成一些夜间批处理增量文件以发送到另一个平台。我的问题是如何检测哪些记录是新的或更改的,以便我可以在复制过程中捕获这些记录。

有没有办法使用 HANA 的内置功能来检测新的/更改的记录?

【问题讨论】:

  • 你不能在原始表格上使用插入日期或修改日期字段吗?
  • 您好 Eralper,源表主要是 SAP 表,其中许多或大部分没有修改日期或时间戳。大多数甚至没有等效的创建日期,尽管有些有(例如 Orders KNVK)。如果您的意思是从 SAP 表复制的 HANA 表,那么将 InsertTS 和 ModifiedTS 添加到每个表中会很聪明提取过程中的那些(我们使用 SLT 从 SAP 到 HANA。)由于我们当时没有添加这些字段,我试图通过使用一些替代方法来节省时间和金钱来确定:“这个记录是什么时候开始的这个 HANA 表是创建还是最后修改的?”

标签: database-replication hana cdc change-data-capture


【解决方案1】:

SAP HANA 不提供用于表的通用变更数据捕获接口(截至当前版本 HANA 2 SPS 02)。
这意味着,要检测“自给定时间点以来更改的记录”,必须采取一些其他方法。

根据表格中的信息,可以使用不同的选项:

  • 如果表显式包含对上次更改时间的引用,则可以使用它
  • 如果表具有保证更新特性(例如,没有就地更新和单调 ID 值),则可以使用它。例如。 读取 ID 大于最后处理的 ID 的所有记录
  • 如果表格不提供有关更改时间的内在信息,则可以维护一份表格副本,其中包含 只有到目前为止处理的记录。然后可以使用此副本 比较当前表并计算差异。 SAP HANA 的 智能数据集成 (SDI) 流程图支持这种方法。

根据我的经验,在这个看似简单的增量负载问题上尝试“节省时间和金钱”通常比使用相应功能更复杂、更耗时且更昂贵ETL 工具。

【讨论】:

    【解决方案2】:

    可以根据您的需要创建日志表并组织列,以便通过在数据库表上创建触发器,您可以创建带有时间戳值的日志记录。然后,您可以查询您的日志表,以确定从源表中插入、更新或删除了哪些记录。

    例如,以下来自我的一个测试触发代码

    CREATE TRIGGER "A00077387"."SALARY_A_UPD" AFTER UPDATE ON "A00077387"."SALARY" REFERENCING OLD ROW MYOLDROW,
         NEW ROW MYNEWROW FOR EACH ROW 
    begin INSERT 
    INTO SalaryLog ( Employee,
         Salary,
         Operation,
         DateTime ) VALUES ( :mynewrow.Employee,
         :mynewrow.Salary,
         'U',
         CURRENT_DATE )
    ;
    
    end
    ;
    

    您可以创建类似于 AFTER UPDATE 的 AFTER INSERT 和 AFTER DELETE 触发器

    您可以组织您的日志表,以便只要保留表名、PK 字段和值、操作类型、时间戳值等,就可以跟踪多个表。 但是为每个表使用单独的 Log 表会更好也更容易。

    【讨论】:

    • 将日志添加到表中当然是一种选择,但了解后果很重要。通过创建触发器,创建了“不可见”的依赖关系,即只要 DBA/开发人员不注意它们,就不会知道它们的存在。该解决方案需要源表中的主键和日志表的管理 - 用于数据量和结构更改。基本上,这种方法就是 SAP SLT 正在做的事情,这应该证明这些小细节是如何使这种方法不容易那么易于构建的。
    • 实际上用于此类需求的是不同数据库供应商提供的 CDC Change Data Capture 功能kodyaz.com/articles/change-data-capture.aspx。 SQL Server 在 SQL Server 2008 中提供了这个工具。我没有在 HANA 上体验过。但是apps.support.sap.com/sap/support/knowledge/preview/en/2505510我虽然它已经包含在 SDI 智能数据集成中
    • Lars,Eralper,感谢您的反馈。我想你已经回答了我的核心问题,即是否有任何内置的东西,例如每条 HANA 记录上的系统属性,可以用作一种“后门”时间戳。
    • 似乎很清楚这样的后门不存在——或者如果你们不知道的话,它隐藏得非常好!我想我将不得不咬紧牙关,完成增强 SLT 作业的工作,以将创建/修改的时间戳添加到每个原始表,其中时间戳表示 HANA 记录的创建/更新时间(不是实际的源记录日期/时间,在许多情况下我们无法轻易知道。)这将为进行增量提取提供必要的基础。
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多