我见过Dimension Lookup/Update documentation here和其他一些博客。但我似乎无法得到一个清晰的想法。 我有一个具有以下结构的表:
Key Name Code Status IN Out Active
key name code status active
来自csv文件。
我需要对scd type2使用Dimension查找/更新步骤并填充IN/Out
。
设置连接详细信息后,
我已使用选项KEY
将密钥设置为Date of last insert (without stream field as source)
,将字段设置为所有其他字段。如果任何其他字段发生更改,我需要在数据库中创建一个新行。该行将具有相同的key
和更新的详细信息,out
设置为无穷大,in
设置为当前系统日期。
日期范围开始字段设置为IN
,表日期范围结束设置为数据库的OUT
列。
我不明白这个技术密钥的概念,因为密钥也来自csv文件。
当我点击预览时出现错误:
DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC:
请告诉我更多详情以及我必须错过的任何步骤或设置。
答案 0 :(得分:4)
用于构建 SCD II。表的Dimension Lookup / Update
步骤(用于更新模式)的关键点是:
id
列(我猜您的CSV文件中的Key
)。它用于查找先前存储的具有相同Key
的行,因此该步骤可以将传入行与已存储在SCD II中的行进行比较。并评估行是否已更改。technical_key
)。您的PDI记录流中也是新的(将其命名为与表technical_key
中的相同)。将其设置为auto increment
。当将任何新行插入表中时,它将自动递增,并且其值在表中是唯一的(因此可以用作表的主键)。 last_updated_date
列,每次在源数据中更新行记录时,该列都会将其值更改为实际日期。或者您可以使用执行转换时的实际时间(从Get System Info
。system date
步骤获得)。 日期范围开始字段,表日期范围和: SCD II中的每一行。 table需要有效期(行数据中的范围有效)。此期间由两个日期定义 - 开始(Date range start field
)和结束日期(Table date range end
)。您设置为IN
和Out
的两个字段(表格列的名称)。该步骤将使用“Min. year = 1900
”和Max. year = 2199
值自动确定其值(设置Range start, end
和Stream Datefield
):
Key
标识)是新的时:
Key = 1; technical_key = 123; In = 1900-01-01; Out = 2199-12-31; Name = X
Key = 1; technical_key = 123; In = 1900-01-01; Out = 2015-03-13; Name = X
Key = 1; technical_key = 158; In = 2015-03-13; Out = 2199-12-31; Name = A
字段 - 更新字段:在此定义要存储的所有数据字段:Name Code Status Active
。作为Type of dimension update
集合Insert
(用于SCD II。属性)。
Date of last insert (without stream field as source)
无法使用,因为它只是简单地将实际日期时间写入特定dimension field
,您无法定义stream field
以及此选项。Punch through
选项。它会覆盖具有相同Key
的行中的所有匹配项。例如。 Punch through
上的Name
(新值'A'):
Key = 1; technical_key = 123; In = 1900-01-01; Out = 2015-03-13; Name = A
Key = 1; technical_key = 158; In = 2015-03-13; Out = 2199-12-31; Name = A