首页 > 解决方案 > 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 &amp; 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”。出现附件中的错误。请建议如何解决此问题。输入Json属性异常

标签: apache-nifi

解决方案


@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


推荐阅读