Pentaho Kettle spoon - 如何创建31列浮动类型数据的列表来检查它是NULL / NOT NULL

时间:2018-06-08 05:32:38

标签: pentaho etl kettle spoon

案例:

TestCompany Corporation每个月都会在csv文件中向我们发送支出数据。数据是每个serviceId的日期 - 支出值对。在月度文件中也可能对前几个月发送的数据进行更正。更新文件中的值更具真实价值。我们必须设计一个摄取过程,其中包含详细的数据模型和数据流图,以及如何存储每个serviceId的日期和支出,同时牢记记录的可追溯性。下一个文件可能包含更新。

2)输入:具有以下结构的CSV文件:

Sr No.  Header

Column 1    serviceId
Column 2    month
Column 3    d1
Column 4    d2
Column 5    d3
Column 6    d4
Column 7    d5
Column 8    d6
Column 9    d7
Column 10   d8
Column 11   d9
Column 12   d10
Column 13   d11
Column 14   d12
Column 15   d13
Column 16   d14
Column 17   d15
Column 18   d16
Column 19   d17
Column 20   d18
Column 21   d19
Column 22   d20
Column 23   d21
Column 24   d22
Column 25   d23
Column 26   d24
Column 27   d25
Column 28   d26
Column 29   d27
Column 30   d28
Column 31   d29
Column 32   d30
Column 33   d31

注意:

  • 一个。与第一个非空值对应的日期必须是 被视为开始日期。
  • 湾与最后一个对应的日期 必须将非空值视为截止日期。
  • ℃。 CSV中为NULL 起始日期和结束日期之间必须考虑为0.00 仅计算目的。
  • 示例输入:

    serviceId,month,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31 FEUSA0002V,200107,,,,,,,,,,,,,,,,,26.2866666667,,,,,,,25.5166666667,25.3333333333,25.7,25.8333333333,,,25.8333333333,26.1666666667

    月份栏代表月份,例如201707代表2017-07。每天的值由列号表示(201707的d1是2017 - 07 - 01,201707的d2是2017-07-02,依此类推。)

4)问题陈述:

  • 一个。对于每个serviceId,找出缺少值数据的日期,并准备一个“|”分隔的日期列表,以便我们可以恢复从TestCompany Corporation获取数据。

  • 湾存储5.b中给出的转换数据。总数是所有可用值的总和。

5)所需的输出CSV:

  • 一个。

    serviceId,missing_dates FEUSA0002V, 2001-07-18|2001-07-19|2001-07-20|2001-07-21|2001-07-22|2001-07-23

  • serviceId,StartDate,EndDate,Total FEUSA0002V, 2017-07-01,2017-10-31,369.1458

INPUT FEED示例(具有相同serviceid的多行)

ServiceId,month,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31
F0CAN062AH,201706,,31.55,,,31.48,31.39,31.42,31.42,31.46,,,31.29,,31.12,31.13,,,,31.33,,31.31,,31.6,,,31.65,31.46,31.64,31.34,,
F0CAN062AH,201707,,,,31.31,,,,,,31.09,,,31.43,,,,31.23,,,31.39,,,,,31.29,31.1,31.0,30.88,,,30.87
FEUSA04ABQ,200304,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,26.98,
F0CAN05N3F,201612,,,,,,,,,,,,,,,,,,,,24.78,24.77,24.8,24.82,,,,,,,,
F0CAN05N3F,201701,,,24.75,,24.96,24.93,,,,24.9,24.96,,24.91,,,24.94,,,24.93,25.12,,,25.0,25.1,,,,,,,25.23
F0CAN05N3F,201702,25.29,25.22,25.27,,,25.29,25.35,,,25.8,,,25.87,,26.02,,,,,,,26.3,,25.93,,,25.77,,,,

2 个答案:

答案 0 :(得分:0)

问题a:

enter image description here

  1. 执行此操作的一种方法是normalize csv文件,以便生成的流为4列:ServiceId,month,day和value。如果你没有“Get fields按钮的帮助,下面图片中的参数会非常烦人。

  2. 然后您必须从月份和d#字段计算日期。我会在Javascript步骤中执行此操作,该步骤允许同时将日期设置为ISO格式。 Javascript是

    var date = new Date(month.substr(0,4),month.substr(5,2)-1,substr(day,1));

  3. 然后filter具有非空值的ServiceId和日期。

  4. 如果您需要按ServiceId排序日期:Sort,日期

  5. Group ServiceId流程,Concatenate strings separated by“|”,subject =日期,name结果“missing_dates”。

  6. enter image description here

答案 1 :(得分:0)

问题b。

enter image description here

完全相同,除了最后一步是Group by ServiceId,其中

  • StartDate是日期的first-non null value
  • EndDate是日期的最后一个非空值`
  • 总和是值的总和。

不是这样,在这种情况下,Filter非空值是可选的。