我们如何使用ExecuteScript处理器中的JavaScript将TimeZone从UTC转换为NiFi中的America / New_York。
更多信息:
我知道我们可以在已经实现的UpdateRecord处理器中进行操作。但是文件太大(超过20GB),并且我正在ExecuteScript处理器中进行一些预处理,所以我不想再次重复整个文件。目前,处理单个文件需要18个小时以上的时间。我认为在ExecuteScript中实现时区转换,将大大减少处理时间。
我当前所在的确切位置:
我目前无法导入和创建SimpleDateFormat
之类的Java对象
我试图在NiFi中实现的Java代码(通过将其转换为JavaScript )如下:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class HelloWorld {
public void convertDateTimeZone() throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
TimeZone utcZone = TimeZone.getTimeZone("UTC");
String dateInString = "1982/01/10 10:20:56";
sdf.setTimeZone(utcZone);
Date utcDate = sdf.parse(dateInString); // Create a new Date object
System.out.println(sdf.format(utcDate));
SimpleDateFormat nysdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
TimeZone newyorkZone = TimeZone.getTimeZone("America/New_York");
nysdf.setTimeZone(newyorkZone);
System.out.println(nysdf.format(utcDate));
}
}
答案 0 :(得分:0)
下面的示例代码显示了如何从ExecuteScript Javascript中引用Java SimpleDateFormat类:
var flowFile = session.get();
if (flowFile !== null) {
var StreamCallback = Java.type("org.apache.nifi.processor.io.StreamCallback");
var IOUtils = Java.type("org.apache.commons.io.IOUtils");
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets");
var SimpleDateFormat = Java.type("java.text.SimpleDateFormat")
var TimeZone = Java.type("java.util.TimeZone")
flowFile = session.write(flowFile, new StreamCallback(function(inputStream, outputStream) {
var inputDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
var utcZone = TimeZone.getTimeZone("UTC")
inputDateFormat.setTimeZone(utcZone)
var outputDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
var outputZone = TimeZone.getTimeZone("America/New_York")
outputDateFormat.setTimeZone(outputZone)
var inputDateTime = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
var utcDate = inputDateFormat.parse(inputDateTime)
var outputDateTime = outputDateFormat.format(utcDate)
IOUtils.write(outputDateTime, outputStream, StandardCharsets.UTF_8)
}));
session.transfer(flowFile, REL_SUCCESS);
}