Talend Open Studio 7.1:tJavaFlex输出问题

问题描述 投票:1回答:1

我正在寻求您的帮助,tJavaFlex组件遇到了问题。

editorName ;ProductName ;end_date_resorption_versions;end_date_supported_versions ;end_date_recommended_versions
EditorA;PN_A;31/03/2017,31/03/2017,31/03/2017,31/03/2017,31/03/2017,31/03/2017;null;null 
EditorA;PN_A;30/06/2024;null;30/06/2024
EditorA;PN_A;30/11/2020,30/06/2017;null;null 
EditorA;PN_A;null;30/06/2024;null 
EditorA;PN_A ;null;null;null 
EditorA;PN_A;30/11/2020,30/11/2020;null;null 
EditorB;PN_B;18/05/2017,31/03/2017,31/01/20;null;null 
EditorB;PN_B;03/06/2024;01/02/2020;30/06/2024
EditorB;PN_B;23/12/2014      ;null;null 
EditorB;PN_B;null;01/02/2020;30/06/2020
EditorB;PN_B;null;null;null 
EditorB;PN_B;12/12/2012,31/12/2020;null;13/01/2020

Query

如您所见,同一列中有日期列表(字符串格式)。

我想做的==>是查找每列(而不是行)的最小日期

Result expected

我的方法是:

  1. 按列,将所有值存储在数组中
  2. 将ListString转换为ListDate
  3. 在每个ListDate中查找日期的最小值

我认为最好的方法是使用tJavaFlex组件。

----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
**Start Code :**

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

// Array for end_date_resorption_versions
List<String> myStringList_edrv = new ArrayList<>();
List<Date> dates = new ArrayList<>();

// Array for end_date_supported_versions
List<String> myStringList_edsv = new ArrayList<>();
List<Date> dates_edsv = new ArrayList<>();

// Array for end_date_recommended_versions
List<String> myStringList_edrev = new ArrayList<>();
List<Date> dates_edrev = new ArrayList<>();
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
**main code :**

if (row4.end_date_resorption_versions == null ){
        row4.end_date_resorption_versions  = "31/12/2099";
    }
if (row4.end_date_supported_versions == null ){     
        row4.end_date_supported_versions   = "31/12/2099";
    }
if (row4.end_date_recommended_versions == null) {
        row4.end_date_recommended_versions = "31/12/2099";
    }
// populating data : 
myStringList_edrv.addAll(Arrays.asList(row4.end_date_resorption_versions.split(",")));
myStringList_edsv.addAll(Arrays.asList(row4.end_date_supported_versions.split(",")));
myStringList_edrev.addAll(Arrays.asList(row4.end_date_recommended_versions.split(",")));
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
**end code :**

// transform ListString to ListDate : end_date_resorption_versions
for (int i = 0 ; i < myStringList_edrv.size(); i++) {
    dates.add(sdf.parse(myStringList_edrv.get(i)));
    }
// transform ListString to ListDate : end_date_supported_versions
for (int i = 0 ; i < myStringList_edsv.size(); i++) {
    dates_edsv.add(sdf.parse(myStringList_edsv.get(i)));
    }
// transform ListString to ListDate : end_date_recommended_versions
for (int i = 0 ; i < myStringList_edrev.size(); i++) {
    dates_edrev.add(sdf.parse(myStringList_edrev.get(i)));
    }

// getMinDate : end_date_resorption_versions
row6.out_date_edrv  =   sdf.format(Collections.min(dates));
// getMinDate : end_date_supported_versions
row6.out_date_edsv  =   sdf.format(Collections.min(dates_edsv));
// getMinDate : end_date_recommended_versions
row6.out_date_edrev =   sdf.format(Collections.min(dates_edrev));

row6.out_editor_name = row4.editor_name;
row6.out_product_name = row4.product_name;

System.out.println("out_date_edrv => " + row6.out_date_edrv);
System.out.println("out_date_edsv => " + row6.out_date_edsv);
System.out.println("out_date_edrev => " + row6.out_date_edrev);

我的所有值都为空,而system.out.println中显示的结果很好

null value

我的工作设计是:

tPostgresqlInput ---- row4(Main)---- tJavaFlex_1 ---- row6(Main)---- tLogRow

一些帮助将不胜感激。

arraylist talend
1个回答
0
投票

您不需要所有这些Java代码。这是仅使用Talend组件的解决方案,它的优点是在您的需求发生变化时易于维护。enter image description here

我首先规范化您的日期列;如果只有end_date_resorption_versions可以包含日期列表,则可以跳过分别标准化tNormalize_2tNormalize_3end_date_supported_versionsend_date_recommended_versionsenter image description here

tMap_1可能不是必需的,因为我将样本数据复制粘贴到文件中进行测试,所以我将其用于将“空”文字转换为null,否则以下转换将失败。

enter image description here

tConvertType_1然后通过选中选项“自动转换”并将日期设置如下,将日期字符串转换为日期类型:enter image description here

最后,tAggregateRow_1将在editorNameProductName列上分组,并从每个日期列中获取最小日期:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.