代码之家  ›  专栏  ›  技术社区  ›  Pysparker

用三角洲湖实现SCD类型2

  •  0
  • Pysparker  · 技术社区  · 3 年前

    我需要在我的增量表中实现SCD类型2。场景如下。

    源表列为:

    ---------------------------------------------------
    state.  Code.   Name.    value.    insert_datetime
    ---------------------------------------------------
    TX.     AX       transport  2.2        2023-01-01
    AL      BB       Mining     1.1        2023-01-03
    BY      XC       Infras.    4.1        2022-06-06
    JJ      NR       Educ       5.6        2023-08-10 
    

    目的地表(银色)如下:

    --------------------------------------------------------------------------------
    state.  Code.   Name.    value.    insert_datetime.  is_current.     ExpiryDate
    --------------------------------------------------------------------------------
    TX.     AX       transport  2.2        2023-08-14      Y              9999-12-31
    AL      BB       Mining     1.1        2023-08-14.     Y              9999-12-31
    BY      XC       Infras.    4.4        2023-08-14.     N              2023-08-14
    BY      XC       Infras.    4.1        2023-08-14.     Y              9999-12-31
    JJ      NR       Educ       5.6        2023-08-14      Y              9999-12-31
    

    我想要实现的是插入新记录,删除丢失的记录,更新现有记录,将前一个记录标记为非活动记录,并插入新记录(对于状态BY)。

    我想在databricks平台上使用Python或PySpark来实现这一点,并使用了一些方法,但作为SDC Type 2的新手,我不知道如何实现这一目标。

    我看到的所有例子都显示了代理密钥和合并密钥, 我的一个问题是需要一个单独的代理密钥和merge_key。

    我正在考虑根据我在两个数据帧(源和目标)中的键列[状态、代码、名称、值]创建一个代理键,但我不确定如何端到端地实现结果。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Jonathan    3 年前

    如果您使用的是Delta Lake版本>=2.0.0,为什么不考虑使用 Change Data Feed (CDF) 功能来实现您的目标?

    通过启用具有CDF功能的表,您可以读取最新快照中的表,也可以通过设置 readChangeFeed startingVersion startingTimestamp

    虽然它与SCD Type 2不完全相同,但我认为它们很相似:

    1. CDF提供 _change_type 元数据,用于指示记录是否在 insert , update delete 地位
    2. CDF提供 _commit_timestamp 元数据,以指示何时更新记录。
    3. CDF提供 _commit_version 元数据,以指示哪个是最新更新的记录。

    您可以使用{state,code,name}作为合并键进行尝试。您可以在Databricks博客中查看示例: https://www.databricks.com/blog/2021/06/09/how-to-simplify-cdc-with-delta-lakes-change-data-feed.html