NiFi,Jolt的操作“子字符串”不起作用

问题描述

我有一些日期时间标记,我假装将其分组在紧接其之前的四分之一小时内。

例如,我有以下数据:

[
  {
    "id": "123","dateTime": "2020-07-08T08:49:50+02:00","value": "1"
  },{
    "id": "123","dateTime": "2020-07-08T13:14:57+02:00","dateTime": "2020-07-08T13:15:15+02:00","dateTime": "2020-07-08T13:36:39+02:00","value": "1"
  }
]

经过一些JOLT转换后,我得到了以下数据:

[ {
  "id" : "123","dateHour" : "2020-07-08T08","minutes" : "45","value" : "1"
},{
  "id" : "123","dateHour" : "2020-07-08T13","minutes" : "0","minutes" : "15","minutes" : "30","value" : "1"
} ]

在这里我有问题。借助网页http://jolt-demo.appspot.com/,我成功使用以下JOLT代码将“ 0”转换为“ 00”

[
{ "operation": "modify-overwrite-beta","spec": { 
    "*": { 
      "minutes": "=concat('0',@(0))" 
    } 
  } 
},{ "operation": "modify-overwrite-beta","spec": { 
    "*": { 
      "minutes": "=substring(@(1,minutes),1,3)" 
    }
  }
}
]

预期的输出(并通过网页获得):

[ {
  "id" : "123","minutes" : "00","value" : "1"
} ]

NiFi中的实际输出

[ {
  "id" : "123","minutes" : "045","minutes" : "015","minutes" : "030","value" : "1"
} ]

由于某些原因,“ = substring()”函数无法在NiFi中正常运行。有人有什么技巧可以接受字符串的后两项吗?

解决方法

您可以转换为数字并将其左移。看看是否有帮助

message.guild.channels.create('ticket ' + message.member.displayName,{ parent: '744477882730020965' });

输入:

[
  {
    "operation": "modify-overwrite-beta","spec": {
      "*": {
        "minutes": ["=toInteger",0]
      }
    }
  },{
    "operation": "modify-overwrite-beta","spec": {
      "*": {
        "minutes": "=toString"
      }
    }
  },"spec": {
      "*": {
        "minutes": "=leftPad(@(1,minutes),2,'0')"
      }
    }
  }
]

输出:

[
  {
    "id": "123","dateHour": "2020-07-08T08","minutes": "045","value": "1"
  },{
    "id": "123","dateHour": "2020-07-08T13","minutes": "00","minutes": "015","minutes": "030","value": "1"
  }
]