保留数据类型的 ConvertAvroToJSON Apache Nifi
ConvertAvroToJSON Apache Nifi with data type preserve
下面是我创建的用于从数据库中获取数据并调用 Web 服务的流程。
QueryDatabaseTableRecord --> SplitAvro --> ConvertAvroToJson --> 计算JsonPath --> ReplaceText --> InvokeHTTP
在转换 AvroToJson 时,日期列被解释为整数值。
avor 对象中来自数据库的日期格式
在将 Avro 转换为 Json 后,日期格式已转换为整数。
在将 Avro 转换为 Json 时是否有任何方法可以保留数据类型?
我尝试过的 Avro 架构:
{
"type" : "myschema",
"namespace" : "nifi",
"name" : "result",
"fields" : [
{ "name" : "ID" , "type" : "string" },
{ "name" : "IDEXT" , "type" : "string" },
{ "name" : "Copany" , "type" : "string" },
{ "name" : "Title" , "type" : "string" },
{ "name" : "Name" , "type" : "string" },
{ "name" : "Name1" , "type" : "string" },
{ "name" : "Name2" , "type" : "string" },
{ "name" : "Name3" , "type" : "string" },
{ "name" : "Name4" , "type" : "string" },
{ "name" : "Alais" , "type" : "string" },
{ "name" : "Legacyid" , "type" : "string" },
{ "name" : "Language" , "type" : "string" },
{ "name" : "Searchterm1" , "type" : "string" },
{ "name" : "Searchterm2" , "type" : "string" },
{ "name" : "Effectivedate" , "type" : "timestamp" },
{ "name" : "Recon_account" , "type" : "string" },
{ "name" : "SortKey" , "type" : "string" },
{ "name" : "CashMgmtGroup" , "type" : "string" },
{ "name" : "ValueAdjust" , "type" : "string" },
{ "name" : "LegalStatus" , "type" : "string" },
{ "name" : "Attr1" , "type" : "string" },
{ "name" : "Attr2" , "type" : "string" },
{ "name" : "Comments" , "type" : "string" },
{ "name" : "Vendor" , "type" : "string" },
{ "name" : "Authorization" , "type" : "string" },
{ "name" : "TradingPartner" , "type" : "string" },
{ "name" : "CheckDigit" , "type" : "string" },
{ "name" : "Industry" , "type" : "string" },
{ "name" : "TrainStation" , "type" : "string" },
{ "name" : "Contains" , "type" : "string" },
{ "name" : "RepublishFuncion" , "type" : "string" }
]
}
@Ramu 将字段转换为字符串,而不是时间戳,因为日期不是时间戳。
如果您需要处理该值以从您想要使用该字符串的日期开始获取真正的时间戳,然后使用表达式语言来获取时间戳。您可以在 updateAttribute 中对通过 EvaluateJson 提取的属性执行此操作。
完整时间戳的示例是:
${dateString:toDate("yyyy-mm-dd"):toNumber():format("yyyy-MM-dd HH:mm:ss.SSS")}
昨天的例子是:
${dateString:toDate("yyyy-mm-dd"):toNumber():minus(86400000):format("yyyy-mm-dd")}
注意你在 toDate 中告诉它字符串的格式,然后可以将函数链接在一起,最后告诉它输出格式。
您可以在我的 nifi 模板中找到其他一些使用时间戳的示例:
https://github.com/steven-dfheinz/NiFi-Templates/blob/master/Working_with_TimeStamps.xml
下面是我创建的用于从数据库中获取数据并调用 Web 服务的流程。
QueryDatabaseTableRecord --> SplitAvro --> ConvertAvroToJson --> 计算JsonPath --> ReplaceText --> InvokeHTTP
在转换 AvroToJson 时,日期列被解释为整数值。
avor 对象中来自数据库的日期格式
在将 Avro 转换为 Json 后,日期格式已转换为整数。
在将 Avro 转换为 Json 时是否有任何方法可以保留数据类型?
我尝试过的 Avro 架构:
{
"type" : "myschema",
"namespace" : "nifi",
"name" : "result",
"fields" : [
{ "name" : "ID" , "type" : "string" },
{ "name" : "IDEXT" , "type" : "string" },
{ "name" : "Copany" , "type" : "string" },
{ "name" : "Title" , "type" : "string" },
{ "name" : "Name" , "type" : "string" },
{ "name" : "Name1" , "type" : "string" },
{ "name" : "Name2" , "type" : "string" },
{ "name" : "Name3" , "type" : "string" },
{ "name" : "Name4" , "type" : "string" },
{ "name" : "Alais" , "type" : "string" },
{ "name" : "Legacyid" , "type" : "string" },
{ "name" : "Language" , "type" : "string" },
{ "name" : "Searchterm1" , "type" : "string" },
{ "name" : "Searchterm2" , "type" : "string" },
{ "name" : "Effectivedate" , "type" : "timestamp" },
{ "name" : "Recon_account" , "type" : "string" },
{ "name" : "SortKey" , "type" : "string" },
{ "name" : "CashMgmtGroup" , "type" : "string" },
{ "name" : "ValueAdjust" , "type" : "string" },
{ "name" : "LegalStatus" , "type" : "string" },
{ "name" : "Attr1" , "type" : "string" },
{ "name" : "Attr2" , "type" : "string" },
{ "name" : "Comments" , "type" : "string" },
{ "name" : "Vendor" , "type" : "string" },
{ "name" : "Authorization" , "type" : "string" },
{ "name" : "TradingPartner" , "type" : "string" },
{ "name" : "CheckDigit" , "type" : "string" },
{ "name" : "Industry" , "type" : "string" },
{ "name" : "TrainStation" , "type" : "string" },
{ "name" : "Contains" , "type" : "string" },
{ "name" : "RepublishFuncion" , "type" : "string" }
]
}
@Ramu 将字段转换为字符串,而不是时间戳,因为日期不是时间戳。
如果您需要处理该值以从您想要使用该字符串的日期开始获取真正的时间戳,然后使用表达式语言来获取时间戳。您可以在 updateAttribute 中对通过 EvaluateJson 提取的属性执行此操作。
完整时间戳的示例是:
${dateString:toDate("yyyy-mm-dd"):toNumber():format("yyyy-MM-dd HH:mm:ss.SSS")}
昨天的例子是:
${dateString:toDate("yyyy-mm-dd"):toNumber():minus(86400000):format("yyyy-mm-dd")}
注意你在 toDate 中告诉它字符串的格式,然后可以将函数链接在一起,最后告诉它输出格式。
您可以在我的 nifi 模板中找到其他一些使用时间戳的示例:
https://github.com/steven-dfheinz/NiFi-Templates/blob/master/Working_with_TimeStamps.xml