【发布时间】: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