【问题标题】:Apache NiFi from unix timestamp to actual date not workingApache NiFi 从 unix 时间戳到实际日期不起作用
【发布时间】:2023-01-02 20:57:49
【问题描述】:

我有以下 NiFi Flow,我正在努力从 unix 时间戳中生成日期。自去年以来我一直找不到解决方案:(

首先,我从 Kafka 处理器收到一个文件。 数据以文本形式出现,如下所示:

exclsns1,1671785280,1671785594,1671785608.

下一步是使用 ConvertRecord 并从这些传入文件中生成 Parquet 文件。 为此,我生成了以下模式:

记录阅读器 --> CSV 阅读器:

{
  "type" : "record",
  "name" : "spark_schema",
  "fields" : [ {
    "name" : "excelReader",
    "type" : [ "null", "string" ],
    "default" : null
  }, {
    "name" : "time",
    "type" : [ "null", "long" ],
    "default" : null
  }, {
    "name" : "starttime",
    "type" : [ "null", "string" ],
    "default" : null
  }, {
    "name" : "endtime",
    "type" : [ "null", "string" ],
    "default" : null 
    } ]
}

记录编写器 --> Parquet 记录集编写器

{
  "type" : "record",
  "name" : "spark_schema",
  "fields" : [ {
    "name" : "excelReader",
    "type" : [ "null", "string" ],
    "default" : null
  }, {
    "name" : "time",
    "type" : [ "null", "long" ],
    "default" : null
  }, {
    "name" : "starttime",
    "type": { "type":"int", "logicalType":"date"},
    "default" : null
  }, {
    "name" : "endtime",
    "type": { "type":"long", "logicalType":"timestamp-millis"},
    "default" : null
  } ]
}

请注意,我尝试了不同类型的数据,但都没有解决我的问题。 下一步是进入 PartitionRecord 处理器,我在其中使用 ParquetReader 和相同的 Parquet Record Set Writer 控制器。 除此之外,我还定义了 6 个属性来帮助我确定数据未按预期转换的原因:

a_endtime --> /endtime
a_endtime_converted --> format(/endtime, "yyyy/MM/dd/HH", "GMT")
a_startime --> /starttime
a_startime_converted --> format(/starttime, "yyyy/MM/dd/HH", "GMT")
a_time  --> /time
a_time_converted --> format(/time, "yyyy/MM/dd/HH", "GMT")

但是,一旦流文件在 PartitionRecord 之后进入成功队列,我就有以下值:

a_endtime
1671785608
a_endtime_converted
1970/01/20/08
a_startime
1671785594
a_startime_converted
1970/01/20/08
a_time
1671785280
a_time_converted
1970/01/20/08

1671785608 = 2022 年 12 月 23 日星期五上午 8:53:28

1671785594 = 2022 年 12 月 23 日星期五上午 8:53:14

1671785280 = 2022 年 12 月 23 日星期五上午 8:48:00

我做错了什么并且为每个值生成相同的日期?有没有其他人遇到过类似的问题,并且可能会提示我如何解决我的问题?

谢谢 :)

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    自 1/1/1970 以来以秒计算的 Unix 时间

    Nifi基于java,java时间自1/1/1970开始以毫秒计算

    因此,在格式化之前,您只需将值乘以 1000

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 2013-06-03
      • 1970-01-01
      • 2010-10-02
      • 2021-02-19
      • 1970-01-01
      • 2016-06-02
      • 2018-07-09
      • 1970-01-01
      相关资源
      最近更新 更多