You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将azure.timestamp转换为NiFi日期类型以实现Blob过滤

处理NiFi中ListAzureBlobStorage的azure.timestamp过滤问题

我来帮你理清这个问题——首先得明确azure.timestamp到底是什么,然后再讲怎么把它转成NiFi能直接用来对比的日期类型。

1. 先搞懂azure.timestamp的含义

这个属性是Azure Blob的最后修改时间的毫秒级Unix时间戳,也就是从1970-01-01 00:00:00 UTC开始到Blob最后修改时刻的毫秒数。比如1685587200000对应的就是2023-06-01 00:00:00 UTC。

2. 把时间戳转成NiFi日期对象

NiFi表达式语言(EL)里的toDate()函数可以直接处理这种毫秒级时间戳,只需要指定单位为"millis"就行。比如:

${azure.timestamp:toDate("millis")}

如果担心时区问题(默认会用JVM的本地时区),可以显式指定UTC时区,避免偏差:

${azure.timestamp:toDate("millis", "UTC")}

3. 和已知日期对比过滤

最常用的方式是用RouteOnAttribute处理器来做条件路由,下面举几个常见的过滤场景:

场景1:保留最后修改时间在指定日期之后的FlowFile

比如要保留2023-06-01 00:00:00 UTC之后修改的Blob,配置RouteOnAttribute的一个属性:

  • 属性名:KeepRecent
  • 属性值:
${azure.timestamp:toDate("millis", "UTC"):after('2023-06-01T00:00:00Z')}

然后把符合条件的FlowFile路由到KeepRecent分支,不符合的走默认分支。

场景2:保留在两个日期之间的FlowFile

如果要筛选2023-01-01到2023-06-01之间的Blob,可以这么写:

${azure.timestamp:toDate("millis", "UTC"):between('2023-01-01T00:00:00Z', '2023-06-01T00:00:00Z')}

场景3:用compareTo做更灵活的对比

compareTo()会返回一个整数:小于0表示目标日期更早,等于0表示相同,大于0表示目标日期更晚。比如要保留修改时间不早于2023-06-01的Blob:

${azure.timestamp:toDate("millis", "UTC"):compareTo('2023-06-01T00:00:00Z') >= 0}

小提示

  • 对比的日期字符串最好用ISO 8601格式(比如YYYY-MM-DDTHH:mm:ssZ),这样NiFi能自动识别,不用额外指定格式。如果用其他格式,比如YYYY-MM-DD,可以在after()或compareTo()里补充格式参数,比如:
    ${azure.timestamp:toDate("millis", "UTC"):after('2023-06-01', 'yyyy-MM-dd')}
    
  • 如果你用的是FilterRecord处理器,也可以在记录筛选条件里用同样的表达式逻辑。

内容的提问来源于stack exchange,提问作者Peter Zandbergen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:55:56