【问题标题】:Pentaho Dimension lookup/updatePentaho Dimension 查找/更新
【发布时间】:2015-03-13 05:45:42
【问题描述】:

我看过Dimension Lookup/Update documentation here 和其他一些博客。但我似乎无法得到一个明确的想法。 我有一个具有以下结构的表:

 Key Name Code Status IN Out Active

key name code status active 来自 csv 文件。 我需要对 scd type2 使用维度查找/更新步骤并填充 IN/Out

设置连接详细信息后, 我已将 Keys 设置为 KEY,并将 Fields 设置为所有其他字段,并使用选项 Date of last insert (without stream field as source)。如果任何其他字段发生变化,我需要在数据库中创建一个新行。该行将具有相同的key 和更新的详细信息,其中out 设置为无穷大,in 设置为当前系统日期。

日期范围开始字段设置为IN,表日期范围结束设置为OUT数据库列。

我不明白这个技术密钥的概念,因为密钥也来自 csv 文件。

当我点击预览时出现错误:

   DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: 

请让我知道更多详细信息以及我必须错过的任何步骤或设置。

【问题讨论】:

    标签: csv pentaho etl kettle


    【解决方案1】:

    Dimension Lookup / Update步骤(用于更新模式)用于构建SCD II.表的要点是:

    • Keys - Key fields:在这里,您从源数据中定义了一个 id 列(我猜它来自您的 CSV 文件中的 Key)。它用于查找先前存储的具有相同Key 的行,因此该步骤可以将传入行与已存储在 SCD II 中的行进行比较。并评估该行是否已更改。
    • 技术键字段: 技术键是您需要添加到表中的额外新列(例如technical_key)。在您的 PDI 记录流中也是新的(命名与您的表中的名称相同 technical_key)。将其设置为auto increment。当向表中插入任何新行时,它会自动递增,并且它的值在表中是唯一的(因此可以用作表的主键)。
    • 流日期字段: 通常在此处放置源数据中的last_updated_date 列,每次在源数据中更新行记录时,其值都会更改为实际日期。或者您可以使用从执行转换开始的实际时间(从Get System Info.system date 步骤获得)。
    • 日期范围起始字段、表格日期范围和: SCD II 中的每一行。表需要有有效期(行数据内的范围是有效的)。此期间由两个日期定义 - 开始 (Date range start field) 和结束日期 (Table date range end)。这两个字段设置为INOut(表列的名称)。该步骤将使用“Range start, end”和Stream Datefield 值自动确定它们的值(设置Min. year = 1900Max. year = 2199):

      • 当行(由Key 标识)是新行时:
        • Key = 1; technical_key = 123; In = 1900-01-01; Out = 2199-12-31; Name = X
      • 例如明天。更新了同一行(流日期字段的值 = '2015-03-13'):
        • 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
      • 当您对属性的历史 (SCD I.) 不感兴趣时​​,可以使用 Punch through 选项。它会覆盖具有相同Key 的行中的所有匹配项。例如。 Punch through on 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

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多