【问题标题】:Kettle: How to get max date for each group of rows水壶:如何获取每组行的最大日期
【发布时间】:2013-05-15 10:25:47
【问题描述】:

我正在使用 Kettle 阅读 Excel 表格,该表格包含三个字段:代码、描述和日期。

示例

1 - description A - 01/JAN/2013
2 - description A - 15/JAN/2013
3 - description A - 04/JAN/2013
4 - description B - 02/JAN/2013
5 - description B - 16/JAN/2013
6 - description B - 11/JAN/2013

我想要的是为每一行添加一个附加字段 Max date,其中 max date 是基于描述的组的最新日期,如下所示:

示例 2

1 - description A - 01/JAN/2013 - 15/JAN/2013
2 - description A - 15/JAN/2013 - 15/JAN/2013
3 - description A - 04/JAN/2013 - 15/JAN/2013
4 - description B - 02/JAN/2013 - 16/JAN/2013
5 - description B - 16/JAN/2013 - 16/JAN/2013
6 - description B - 11/JAN/2013 - 16/JAN/2013

具有描述 A 的行组的最新日期为 15/JAN/2013(因为第 2 行)。 具有描述 B 的行组的最新日期为 16/JAN/2013(因为第 5 行)。

【问题讨论】:

    标签: etl kettle pentaho-data-integration


    【解决方案1】:

    这是行非规范化步骤的完美工作:

    http://wiki.pentaho.com/display/EAI/Row+denormaliser

    【讨论】:

    • 同意 - 虽然这一步使用起来很混乱,所以检查示例,一切都会变得清晰!
    • 我会试试行反规范化器!
    • 反规范化器不会导致所有具有相同键的记录只有 1 条记录(因此在示例结果中将只有 2 条记录而不是 6 条)?是否应该使用行非规范化器来获取最大值,然后进行一些合并以将该值粘贴到具有相同键的每条记录上?
    • 获取“描述”列作为键将返回合并值,请参阅文档链接示例
    【解决方案2】:

    实际上更容易将数据拆分为两个流(复制到连续步骤)使用流 1 使用 Group Step 并将组基于描述并设置为聚合最大值以查找每个组的最大日期(应该根据您的示例产生两个输出行)。

    description A - 15/JAN/2013
    description B - 16/JAN/2013
    

    接下来,您为流 2 使用流查找步骤从组步骤中查找 max_date 聚合 - 流 1 使用描述字段作为关键字段,并使用 max_date 聚合作为要检索的值。

    请记住,当您使用分组步骤时,有必要对您的数据进行相应的排序。

    【讨论】:

      【解决方案3】:

      您可以使用Max 作为数组公式来完成此操作。

      因此,假设您在工作表的 A 到 C 列中有原始数据,在单元格 D1 中,您将键入:

      =MAX(--($B$1:$B$4=B1)*($C$1:$C$4))
      

      然后,为了使它成为一个数组公式,你点击 CTRL + SHIFT + ENTER

      当然,更改列 B 和 C 的范围以匹配您的数据集。

      希望这会有所帮助且有意义。

      【讨论】:

      • 如果我不清楚,我很抱歉,但我需要一个使用 Kettle 的解决方案,一个 ETL 工具。
      • 对不起,我错过了。祝你好运!!
      猜你喜欢
      • 2020-08-12
      • 2023-03-07
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 2021-04-18
      • 2019-02-03
      • 1970-01-01
      • 2016-07-23
      相关资源
      最近更新 更多