【问题标题】:ConvertAvroToJSON Apache Nifi with data type preserveConvertAvroToJSON Apache Nifi,数据类型保留
【发布时间】:2020-06-23 07:33:37
【问题描述】:

以下是我创建的用于从 DB 获取数据并调用 Web 服务的流程。

QueryDatabaseTableRecord --> SplitAvro --> ConvertAvroToJson --> EvaluateJsonPath --> ReplaceText --> InvokeHTTP

在转换 AvroToJson 时,日期列被解释为整数值。

来自 Avor 对象中 DB 的日期格式

将 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" }
  ]
}

【问题讨论】:

  • 请使用您在 ConvertAvroToJson 中使用的 avro 架构编辑帖子
  • 我最初没有使用任何 Avro 模式。后来我尝试了上述模式。但这也没有奏效。
  • 将其保留为字符串而不是时间戳。日期不是时间戳。如果您需要处理该值以从日期中获取真正的时间戳,例如从日期中找出“明天”,您将需要使用字符串,然后使用表达式语言作为时间戳......跨度>

标签: json apache-nifi avro converters


【解决方案1】:

@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 2016-11-17
    • 2018-11-20
    相关资源
    最近更新 更多