CDC Logic通过比较源记录和最新目标记录

时间:2019-05-22 18:04:18

标签: sql apache-spark-sql

我正在尝试构建CDC(更改数据捕获)逻辑,在该逻辑中(对于任何给定的键集)将每个源记录与目标中最新记录(该键的记录)进行比较。对于任何给定的键,目标可以保存许多记录(随时间变化的历史记录)。现在,每个源记录将基于自然键加入到目标表中。

  • 如果键匹配,则比较以下项的数据列中的值 源记录和目标以标识任何更改。如果有 差异(在任何列中)将此记录插入作为“ 更新” ( SCD-2

  • 如果键匹配,但任何一个值中的没有更改 比较列,然后放弃该记录。

  • 当源记录找不到与任何现有记录的键匹配时 记录到目标中,然后还将该记录作为<<>新 插入 记录”。

  • 最后,目标表应具有现有记录(不匹配)

    • 插入(用于更新)+插入(用于真实插入)。

例如:
来源:

id|state|zip  
-----------  
1|NY|10234  
2|CA|94623  
3|PA|56712  

现有目标:

id|state|zip|proc_date  
---------------------  
1|NY|10234|2019-05-03
1|MD|23944|2019-05-08  
2|CA|94623|2019-04-15  
5|MO|78132|2019-05-10  

要求输出:

id|state|zip|proc_date  
---------------------  
1|NY|10234|2019-05-03 --> Existing history  
1|MD|23944|2019-05-08 --> Existing latest record to compare with  
1|NY|10234|2019-05-21 --> Insert as update  
2|CA|94623|2019-04-15 --> Existing No-Change  
5|MO|78132|2019-05-10 --> Existing No-Change  
3|PA|56712|2019-05-21 --> New id insert 

请注意,id = 1已经有2条现有记录,其中'2019-05-03'上的记录具有相同的数据值。但是相反,由于它是最新的历史记录,因此将使用2018-05-08上的记录与来源进行比较。
为了比较源和目标之间的数据列,我希望将所有数据列连接起来并应用MD5函数,并生成哈希值,然后在源和目标之间进行比较。 请让我知道您的想法,或者是否需要其他信息。这只能通过 Spark-SQL 解决。 预先感谢您的帮助。

0 个答案:

没有答案