【问题标题】:How to parse column with two types of date format in Talend如何在 Talend 中解析具有两种日期格式的列
【发布时间】:2018-03-17 19:18:59
【问题描述】:

我有.csv 文件,其中有名为created_ts 的列,并包含日期值。但是,日期以两种格式写入:

  • 2016-12-07 14:12:58.727746+01 (yyyy-MM-dd hh:mm:ss.SSSSSSX)
  • 2008-10-25 18:22:32+02 (yyyy-MM-dd hh:mm:ssX)

所以我的问题是如何从.csv 文件中读取数据而不会出现错误“Unparseable date: 2008-10-25 18:22:32+02”

这是显示我如何输入日期格式的图片,但是对于 created_ts 列,我有两种不同格式的日期,所以如果我输入第一个格式,我会收到“无法解析的日期:xxxxxx”错误,如果我输入同样的错误把第二种格式....

【问题讨论】:

  • 我对这个问题投了反对票,因为您在没有向我们展示代码的情况下向我们询问错误。如果没有具体的代码,我们只能猜测问题可能是什么,这对您或未来的读者没有用处。如果您可以edit 您的问题向我们展示您的问题的Minimal, Complete, and Verifiable example,则此反对票可能会被撤回。
  • 没有什么可以编程的。这是 Talend Studio 程序,问题是我有两种不同日期格式的列。在 Talend Studio 中,如果我有包含日期​​的列,我将为格式设置列日期和日期模式的类型,即如果整个列包含单一格式的日期(例如:yyyy-MM-dd)。但是 .csv 中的此列包含两种不同格式的日期,我不知道如何指定 Talend 首先尝试使用一种格式进行解析,如果尝试使用另一种格式解析失败......

标签: java etl talend date


【解决方案1】:

由于您的日期可以是不同的格式,您需要在 tFileInputDelimited 中将您的列读取为字符串类型,然后在 tMap 中检查日期类型(检查日期类型的简单方法是测试其长度)并使用正确的日期格式对其进行解析:

tFileInputDelimited -- tMap -- output

在 tMap 表达式中,你可以有这样的东西:

row.created_ts.length() == 22 ? TalendDate.parseDate("yyyy-MM-dd hh:mm:ssX", row.created_ts) : TalendDate.parseDate("yyyy-MM-dd hh:mm:ss.SSSSSSX", row.created_ts)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2018-03-07
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多