apache-nifi - Nifi UpdateAttribute 处理器中的“无法将属性值解析为日期”
问题描述
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<template encoding-version="1.3">
<description></description>
<groupId>de9048c5-0171-1000-4355-5efd185aa6ad</groupId>
<name>Update_Attribute_Date</name>
<snippet>
<processors>
<id>61a62c99-d8fc-3810-0000-000000000000</id>
<parentGroupId>b055aedb-ad9e-374d-0000-000000000000</parentGroupId>
<position>
<x>0.0</x>
<y>0.0</y>
</position>
<bundle>
<artifact>nifi-update-attribute-nar</artifact>
<group>org.apache.nifi</group>
<version>1.11.4</version>
</bundle>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>Delete Attributes Expression</key>
<value>
<name>Delete Attributes Expression</name>
</value>
</entry>
<entry>
<key>Store State</key>
<value>
<name>Store State</name>
</value>
</entry>
<entry>
<key>Stateful Variables Initial Value</key>
<value>
<name>Stateful Variables Initial Value</name>
</value>
</entry>
<entry>
<key>canonical-value-lookup-cache-size</key>
<value>
<name>canonical-value-lookup-cache-size</name>
</value>
</entry>
<entry>
<key>created_date</key>
<value>
<name>created_date</name>
</value>
</entry>
<entry>
<key>modified_date</key>
<value>
<name>modified_date</name>
</value>
</entry>
<entry>
<key>schema.name</key>
<value>
<name>schema.name</name>
</value>
</entry>
<entry>
<key>statement.type</key>
<value>
<name>statement.type</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>Delete Attributes Expression</key>
</entry>
<entry>
<key>Store State</key>
<value>Do not store state</value>
</entry>
<entry>
<key>Stateful Variables Initial Value</key>
</entry>
<entry>
<key>canonical-value-lookup-cache-size</key>
<value>100</value>
</entry>
<entry>
<key>created_date</key>
<value>${created_date:toDate("EEE MMM dd HH:mm:ss z yyyy"):toNumber():format("yyyy-MM-dd HH:mm:ss.SSS")}</value>
</entry>
<entry>
<key>modified_date</key>
<value>${modified_date:toDate("EEE MMM dd HH:mm:ss z yyyy"):toNumber():format("yyyy-MM-dd HH:mm:ss.SSS")}</value>
</entry>
<entry>
<key>schema.name</key>
<value>village</value>
</entry>
<entry>
<key>statement.type</key>
<value>${cdc.event.type}</value>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<executionNodeRestricted>false</executionNodeRestricted>
<name>Schema=village & Statement Type</name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>success</name>
</relationships>
<state>RUNNING</state>
<style/>
<type>org.apache.nifi.processors.attributes.UpdateAttribute</type>
</processors>
</snippet>
<timestamp>06/13/2020 22:39:36 IST</timestamp>
</template>
我正在尝试使用 CaptureChangeMySQL 处理器将记录从源数据库插入目标数据库。在“CaptureChangeMySQL”中处理时,源表“2020-03-31 23:08:47”中的日期值将更改为格式“Tue Mar 31 23:08:47 IST 2020”。无法将更改值加载到目标表中,因为数据类型是 DateTime 并且收到错误“由于长度而截断”。所以我试图在“UpdateAttribute”处理器中将输入值转换为正确的格式“yyyy-MM-dd HH:mm:ss”。出现附件中的错误。请建议如何解决此问题。
解决方案
@Ganesh Kumar 您正在寻找的表达语言如下:
${testValue:toDate("EEE MMM dd HH:mm:ss z yyyy"):toNumber():format("yyyy-MM-dd HH:mm:ss.SSS")}
在我的 NiFi 测试中,我在 updateAttribute 1 中设置了 testValue = "Tue Mar 31 23:08:47 IST 2020",然后直接到另一个 updateAttribute 2。我确实注意到我的输出是 3 小时,但怀疑这只是我的本地时区差异。
流文件输出为:
test1
2020-03-31 21:08:47.000
testValue
Tue Mar 31 23:08:47 IST 2020
在以上评论之后于 2020 年 6 月 17 日编辑:
访问 EvaluateJsonPath 中每个元素的 json 数组,如下所示:
$[0].created_date
然后将 ${created_date} 属性与我们上面在 updateAttribute 中测试的表达式语言一起使用,如下所示:
${created_date:toDate("EEE MMM dd HH:mm:ss z yyyy"):toNumber():format("yyyy-MM-dd HH:mm:ss.SSS")}
您可以在(右侧流程)找到模板演示: https ://github.com/steven-dfheinz/NiFi-Templates/blob/master/NiFI_EvaluateJsonPath_Demo.xml
推荐阅读
- php - 如何从数组中获取信息以正确显示(Laravel)?
- r - 如何使用序列中的值作为名称在r中的for循环中命名对象
- google-cloud-platform - 为什么我在部署容器时看到此错误:'ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission'?
- r - R 中的“ggtextures”包示例不起作用
- angular - 直接设置属性时不会触发 ngOnChanges
- javascript - Toggle 带有单个查询的 Mongo 文档日期属性
- python - 如果该对象的类在另一个boost模块中声明,如何使用boost将指向C++对象的指针返回给python?
- docker - Mutagen.io 不会在 OSX 上同步 beta -> alpha
- django - 如何为 django 应用程序建模
- c# - 如何制作 Vector3 * Vector3 (*) 运算符