首页 > 解决方案 > 时间戳格式问题(NiFi 的 PutDatabaseRecord)

问题描述

使用 Nifi 中的PutDatabaseRecord (1.9.2) 处理器将日期时间插入 MSSQL 数据库时出现以下错误。

表中的数据类型是DateTime

错误信息

读取一个简单的 csv 文件:

TALKGROUP_REF;FLEET_REF;TALKGROUP_ID;TALKGROUP_NAME;GROUP_TYPE;DISPATCHER_REF;MULTIGROUP_REF;OWNER;FNE_STATE;ADDL_ATTRVAR;LAST_USER_MODIFIED;TIME_STAMP;FNE_OID
3345;424;123456790847070;LOK-KJX-A;T;;;1 53133303;O;;NBA;2014-02-27 15:11:13;
3346;424;123456790847071;LOK-KJX-1;T;;;1 53133303;O;;NBA;2017-05-10 21:29:26;
3347;424;123456790847072;LOK-KJX-2;T;;;1 53133303;O;;NBA;2017-05-10 21:29:35;
3348;424;123456790847073;LOK-KJX-3;T;;;1 53133303;O;;NBA;2017-05-10 21:29:35;
3350;424;123456790847075;LOK-KJX-5;T;;;1 53133303;O;;NBA;2017-05-10 21:29:35;

工作流程

使用的架构:

{ "type" : "record", "name" : "mibas_t005_talkgroup", "fields" : [  
{ "name" : "talkgroup_ref", "type" : ["null","long"] },
{ "name" : "fleet_ref", "type" : ["null","long"] },
{ "name" : "talkgroup_id", "type" : ["null","long"] },
{ "name" : "talkgroup_name", "type" : ["null","string"] },
{ "name" : "group_type", "type" : ["null","string"] },
{ "name" : "dispatcher_ref", "type" : ["null","string"] },
{ "name" : "multigroup_ref", "type" : ["null","string"] },
{ "name" : "owner_", "type" : ["null","string"] },
{ "name" : "fne_state", "type" : ["null","string"] },
{ "name" : "addl_attrvar", "type" : ["null","string"] },
{ "name" : "last_user_modified", "type" : ["null","string"] },
{ "name" : "time_stamp", "type" : ["null", { "type":"long", "logicaltype":"timestamp-millis"} ]},
{ "name" : "fne_oid", "type" : ["null","string"] }]}

时间戳格式:' yyyy-MM-dd HH:mm:ss '

处理器配置 控制器服务详情

标签: apache-nifi

解决方案


解决方案是将模式中的数据类型定义从logicaltype更改logicalType(大写T)。呜呜呜!!!

例如:*{ "name" : "time_stamp", "type" : ["null", { "type":"long", " logicalType ":"timestamp-millis"}*

令人讨厌的部分是它验证。没有警告!但是,如果您错误地使用String而不是正确的字符串(小写 S)或Type而不是在您的架构中键入,您的架构将无法验证,您可以更正它。


推荐阅读