Apache nifi 将年、月和日时间戳附加到合并的输出文件

Posted

技术标签:

【中文标题】Apache nifi 将年、月和日时间戳附加到合并的输出文件【英文标题】:Apache nifi to append year, month and day timestamp to the merged output file 【发布时间】:2019-10-07 13:21:06 【问题描述】:

我正在创建端到端流,通过对通过 tealium 事件流接收的 Json 文件使用 Consume Kafka 来将数据消费到 HDFS 中。目前,我已经使用了 Consume Kafka -> Evaluate Json Path -> Jolttransform Json -> Merge Content -> Evaluate Json Path -> Update attribute -> PutHDFS

要求是将全天假脱机的 Json 数据读取到单个文件中,引用属性 postdate(之前的隐蔽纪元到 YYYYMMDDSS 时间戳)并每天读取数据以合并到单个文件中,最后根据时间戳相关重命名文件到 POST_DATE 字段以区分每日文件。除了根据源属性时间戳字段重命名合并文件的时间戳之外,我已经完成了所有部分。您能帮我如何根据属性 _year_month_day 重命名文件吗?

【问题讨论】:

【参考方案1】:

如果你想POST_DATE属性中解析“年”和“月”,你可以使用formattoDate函数。

例如:

-- year
format(toDate($POST_DATE, "YYYYMMDDSS"),"yyyy")

-- month
format(toDate($POST_DATE, "YYYYMMDDSS"),"MM")

--day
format(toDate($POST_DATE, "YYYYMMDDSS"),"dd")

我不确定重命名文件的含义,如果是指在放入HDFS之前更改文件名,您可以简单地使用UpdateAttribute处理器然后更新属性包含输出文件名,如$year_$month_$day

【讨论】:

感谢您的帮助。我需要根据从 post_date 属性读取的年、月、日重命名输出合并文件。我已经合并了所有的日常文件,并在 HDFS 中创建了年月子文件夹。我在更新属性处理器中添加了文件名以具有键和值。目前,合并的文件名是从当前日期格式而不是从属性创建的,但我需要帮助来引用属性日期。正在创建的当前文件名是 tealium_es_$now():format("yyyy_MM_dd").jsonl。【参考方案2】:

@gogocatmario,感谢您的回复。 为 update_attribute 上的文件名属性添加以下值后已解决问题。 tealium_es_$post_date:toDate("yyyy-MM-dd HH:mm:ss"):format("yyyy_MM_dd").json1

【讨论】:

以上是关于Apache nifi 将年、月和日时间戳附加到合并的输出文件的主要内容,如果未能解决你的问题,请参考以下文章

按月和日过滤 django 日期时间字段的问题

检测和求和年、月和日

如何将天数转换为年、月和日[重复]

将平均值(十进制)转换为年、月和日

从python中的第周、月和日获取日期

无论如何要更改日期输入字段中年、月和日分隔符 (/) 的占位符样式?