【问题标题】:Apache NiFi: Changing Date and Time format in csvApache NiFi:更改 csv 中的日期和时间格式
【发布时间】:2019-11-19 06:35:41
【问题描述】:

我有一个 csv,其中包含一个带有日期和时间的列。我想更改日期时间列的格式。我的 csv 的前 3 行如下所示。

Dater,test1,test2,test3,test4,test5,test6,test7,test8,test9,test10,test11
20011018182036,,,,,166366183,,,,,,
20191018182037,,27,94783564564,,162635463,817038655446,,,0,,

我想把 csv 改成这样。

Dater,test1,test2,test3,test4,test5,test6,test7,test8,test9,test10,test11
2001-10-18-18-20-36,,,,,166366183,,,,,,
2019-10-18-18-20-37,,27,94783564564,,162635463,817038655446,,,0,,

这怎么可能? 我尝试使用UpdateRecord 处理器。

我的属性如下所示:

但是这种方法不起作用,因为数据作为来自UpdateRecord 处理器的故障路由。建议我完成任务的方法。

【问题讨论】:

  • @daggett 我阅读了您提供的链接。我已经遵循了它要求遵循的方法。
  • 你能解释一下吗?
  • @daggett 我遵循了该链接中的指南。所以我无法理解我的工作流程出了什么问题。
  • 使用 UpdateAttribute 可以更改流文件属性。如filename。但是您想更改流文件的内容,UpdateRecord 处理器最符合您的要求。

标签: csv validation apache-nifi


【解决方案1】:

我能够使用UpdateRecord 处理器完成此操作。我使用的表达语言是${field.value:toDate('yyyyMMddHHmmss'):format('yyyy-MM-dd HH:mm:ss')}。

只是这不起作用,因为每次数据都从UpdateRecord 处理器路由到故障路径。

为了修复这个错误我更改了CSVRecordSetWriter 的配置。 Schema Access Strategy 必须更改为 Use String Fields from Header。默认为Use Schema Name Property

【讨论】:

    【解决方案2】:

    策略:使用UpdateRecord 使用expression language 操作时间戳值:

    ${field.value:toDate():format('ddMMyyyy')}
    

    流程:

    生成流文件:

    更新记录:

    设置读取器和写入器以继承架构。包括标题行。保持其他属性不变。

    结果:

    但是,由于一个奇怪的问题,此解决方案可能无法让您满意。当您像这样格式化日期时:

    ${field.value:toDate():format('dd-MM-yyyy')}
    

    ConvertRecord 路由到故障关系:

    类型强制无法正常工作。也许这是一个错误。我找不到这个问题的解决方案。

    【讨论】:

    • 您说要在UpdateRecord 中使用${field.value:toDate():format('ddMMyyyy')}。但在屏幕截图中,${field.value:toDate():format('MMddyyyy')} 内有 UpdateRecord
    • @HimsaraGallege 是的,我把事情搞混了。无论如何..您必须提供您自己的格式字符串,如此处所述nifi.apache.org/docs/nifi-docs/html/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多