Talend SCD

Talend SCD,也称为缓慢变化维度,可以通过 tDBSCD 字段来实现。我们可以使用 SCD 来跟踪对表所做的更改,或保留表数据的历史记录。

为了演示 Talend SCD,我们使用了从 tUnite 作业中获得的表。因此,请参考该作业以理解源。

注意: 我们还创建了几个表来在数据库中存储 Talend SCD 的输出。对于所有表,基本结构与源 相同,并添加了一些额外的列,如 SKey (int)、scd_version(int)、scd_active(int)、scd_start(date) 和 scd_end(date) 列。

Talend SCD 或 tDBSCD 示例

首先,将 tDBConnection、tDBCommit 和 tDBOutput 从 Palette 拖放到 Job 设计空间。接下来,我们从 Repository schema 中选择了 Talend_Unite 表。请参考 将 Talend 连接到 SQL 文章。

Configure the Server and query the Table

请将 tDBSCD 从 DB Common 文件夹拖放到 Job Design。还有一个特定于数据库的 tDBSCD,您可以使用它。

Talend tDBSCD too for SCD 3

请选择您正在使用的数据库。在这里,我们选择 Microsoft SQL Server,然后单击 Apply 按钮。

接下来,将 tDBInput 连接到 Talend tDBSCD。从下面的屏幕截图中,您可以看到必须在 Component 选项卡中填写的字段。如果您有现有连接,请使用相同的连接,否则,请手动或使用 上下文组 填写所有这些详细信息。

Talend tDBSCD too for SCD Components tab

在这里,我们正在使用我们在 tDBConnections 字段中建立的现有连接。因此,我们从 Component 列表中选择了 tDBConnection_1。

uses existing connection for SCD

接下来,单击 SCD Editor 按钮,这将打开以下窗口。所有可用列都放置在 Unused 部分。

Talend SCD 类型 1 示例

SCD 类型 1 或缓慢变化维度类型 1 不保留历史记录。

源键: 请将键列或主键列放在此部分。

Component Editor

代理键: 如果您有任何代表代理键的数字列,请使用该列。在这里,我们正在创建一个名为 SKey 的新列,其值将是

  • 输入字段: 任何输入列
  • 自动递增: 值将自动递增。
  • 例程: 您也可以使用例程。
  • 表最大值 + 1: 表最大值加一。

我将为这个 Talend SCD 类型 1 选择最后一个选项。接下来,拖放您想要跟踪更改的列。在此示例中,我们希望跟踪所有列的更改,因此我们将所有列名添加到了 Type 1 fields 部分。

Talend tDBSCD tool Component Editor for SCD

到目前为止,我们还没有指定我们要保留历史记录或 SCD 类型 1 结果的目标表。因此,请单击 Browse 按钮并从窗口中选择表。在这里,我们正在选择我们之前创建的 Emp_SCD1 表。

Configure Destination Table

单击 Edit Schema 按钮来检查字段。这里,SKey 是我们使用的代理键。

Edit Schema to check Columns

让我们运行 Talend SCD 类型 1 作业。

Run the Talend tDBSCD tool for SCD Job

让我打开 Management Studio,通过打开 SQL Emp_SCD1 表来查看结果。

Check the table

正如您从上图所见,它将 Talend_Unite (TU) 表中的记录与 Skey 列一起转储到了此表中。

让我 更改 TU 的一些值并运行 Talend SCD 类型 1 作业。

Find the Find the changes

从下面的屏幕截图中,您可以看到更改。

updated table

如果您不想保留数据历史记录,请使用 SCD 类型 1。

Talend SCD 类型 2 示例

SCD 类型 2 或缓慢变化维度类型 2 会保留更改的历史记录。保留历史记录意味着它将保持旧行不变,并添加一个带有新值的新行。为了找出旧值和新值之间的差异,它会添加两个额外的列,称为 scd_start 和 scd_end date。

  • scd_start: 默认情况下,它会分配作业的开始时间或记录的第一次录入日期。
  • scd_end: 对于第一次录入,该值为 NULL。每当对此行进行更改时,此值将更新为当前日期。接下来,将创建一个新行,将当前日期作为 scd_start,将 Null 作为 scd_end date。

请单击 OK 按钮以完成 Talend SCD 类型 2 设置。

Talend tDBSCD tool for SCD type 2

让我更改或从 Repository 中选择 Emp_SCD2 表。接下来,单击 Edit Schema 按钮以查看 SCD 类型 2 创建的额外列。

Talend tDBSCD tool for SCD Schema settings

让我们运行 SCD 类型 2 作业并查看结果。在这里,您可以看到带有 scd_end 为 NULL 的额外列。

Null Dates

在这里,我们正在更改 Education 值和 Income 值。接下来,运行 Talend SCD 类型 2 作业。

Change the Original

现在您可以看到两个带有更新值的新行。请注意,这两行原始记录的 scd_end 日期已更新为当前日期。这意味着 EmpID 3 的年收入从 scd_start 到 scd_end 为 50000,并在 2020-05-29 更新为 111111。请记住,我们是在同一时间完成这一切的,因此您可能不会注意到日期差异。但是,如果您允许一天或更改输入日期格式以包含时间,您可以看到更改。

updates

在 Talend SCD 类型 2 中,我们还有另外两个版本控制选项。它们是

  • 版本 (scd_version): 它分配整数值 1 到 n,其中 1 = 第一次插入的行,2 = 行的第一次更改,3 = 第二次更改,依此类推。
  • 活动 (scd_active): 它为活动或最新行分配 1,为以前或旧行分配 0。

您可以根据需要使用其中一个或两个。在这里,我们同时使用两者,因此我们选中了版本和活动。

Talend tDBSCD tool for SCD Versioning

接下来,我们从 Repository 中选择了一个新的 Emp_SCD2Version 表。请单击 Edit schema 以查看 SCD 类型 2 版本控制添加的新列。单击 OK,然后运行 Talend SCD2 版本控制作业。

Talend tDBSCD tool for SCD Versioning Schema

下面的屏幕截图显示了我们最初获得的数据。

Type 2 Primary Table

我们将 EmpID FirstName 更改为 Suresh,并将 EmpID 第 8 个职业更改为 Support。接下来,运行 Talend SCD 类型 2 版本作业。

Type 2 Table Changes

从下面的屏幕截图中,您可以看到输出。在这里,新行的版本号为 2,旧行的 scd_active 变为零,新行变为 1。通过查看版本,您可以了解该值在一段时间内更改了多少次。通过查看 scd_active,可以知道哪一个是最新的?

Type 2 Result Table after changes

让我向您展示当我们再次更改 EmpID 5 行时会发生什么。(Education = Degree)。看,SCD 类型 2 添加了一个新行,版本号为 3,scd_active 为 1。

Type 2 Version Final Table

Talend SCD 类型 3 示例

SCD 类型 3 或缓慢变化维度类型 3 会保留最后两次更改的历史记录。我的意思是当前值和上一个值。

为了保留历史记录,我们必须将所需的字段拖到 Type 3 fields 部分。

通过拖动字段,Talend 将创建当前(实际列)和上一个值。为了演示 Talend SCD 类型 3,我们使用了 Occupation、Sales 和 Yearly Income 列。

Talend tDBSCD tool for SCD Type 3 Component Editor

接下来,我们从 Repository 中选择了一个新的 Emp_SCD3 表。请单击 Edit schema 以查看 SCD 类型 3 添加的新列 SKey。请运行 Talend SCD3 作业。

Talend tDBSCD tool for SCD Type 3 Scheme Editor

Talend SCD 类型 3 的结果将为上一个 Occupation、Income 和 Sales 创建三个额外的列。以及 SKey 的另一个列。

Type 3 First Generated Table

在这里,我们对这三列进行了一些更改,如下所示。接下来,运行 Talend SCD 类型 3 作业。

Type 3 changes in the original table

结果显示在原始列中的新记录,在 previous_Occupation 列中的上一个值,依此类推。

Talend tDBSCD tool for SCD Type 3 Changes in the table

在上面的 Talend SCD 示例中,我们仅为 SCD 类型 3 使用了几个列。为此,我们将其余列保留在 Unused 部分。要获取这些列,请将它们放置在 Type 0 fields 下。放置在此部分下的所有列都将保持不变。

Handling Talend tDBSCD tool for SCD Type 3 remaining columns

为了容纳所有列,我们选择了另一个名为 Emp_SCD3AllColumns 的表。您也可以检查其架构。

Talend tDBSCD tool for SCD Type 3 unused columns schema

让我为所有列运行此 Talend SCD 类型 3。让我们对原始表进行一些更改并运行 SCD 类型 3 作业。如果您注意到,我们还更改了 LastName 和 Education 列。

Type 3 Result Table Changes

现在您可以看到表中的所有列。请注意,LastName 和 Education 列的值保持不变。

Type 3 Result Table