gpt4 book ai didi

javascript - 尼菲 : code in executeScript processor doesn't work properly

转载 作者:行者123 更新时间:2023-11-30 15:01:24 25 4
gpt4 key购买 nike

在这段代码中 想将 lastDate 保存在数组中并使用它来自动增加 startDate 和 endDate 属性值。但它不会生成流文件。我尝试修复它,但它无法创建 flofwile 我应该更改什么?

 var OutputStreamCallback = Java.type("org.apache.nifi.processor.io.OutputStreamCallback");
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets");

Date.prototype.isValid = function () {
return (Object.prototype.toString.call(this) === "[object Date]")
&& !isNaN(this.getTime());
};

var toDate = endDate.getValue(),
parameter1=parameter.getValue(),
count1=count.getValue();

function addDays(date, days) {
var result =new Date(date);
result.setDate(result.getDate() + days);

return formatDate(result);
}
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();

if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;

return [year, month, day].join('-');
}

var flowFile = session.create();
if(flowFile==null) {
var param = 8;
//count = Number(count1);
//var item = item + count1;
var endDate1 = addDays(toDate, param);
var startDate = toDate;
var arr = [];
arr.push(endDate1);

}
if(arr.length>1){
startDate1=arr.pop();
var endDate1 = addDays(startDate1, param);
var startDate = startDate1;
flowFile = session.putAttribute(flowFile, 'startDate', startDate1);
flowFile = session.putAttribute(flowFile, 'endDate', endDate1);
flowFile = session.putAttribute(flowFile, 'parameter', parameter);
}
else {
var param = 8;
var endDate1 = addDays(toDate, param);
var startDate = toDate;
flowFile = session.putAttribute(flowFile, 'count', 1);
flowFile = session.putAttribute(flowFile, 'startDate', startDate);
flowFile = session.putAttribute(flowFile, 'endDate', endDate1);
flowFile = session.putAttribute(flowFile, 'parameter', parameter1);
}

session.transfer(flowFile, REL_SUCCESS);

**它不会抛出异常但也不会生成流文件

  1. ** 我应该添加 (flowfile==null) 来初始化新创建的流文件吗?
  2. 你能推荐一些东西让我的代码更持久、更快速吗?

最佳答案

您的代码的问题是您正在创建一个新的流文件,它保证不会为null。然后评估 if (flowFile == null),它将始终返回 false。您只需在该控制 block 内初始化变量 paramendDate1startDatearr。其余代码不会按预期执行,并且您引用了尚 undefined variable (例如 parameter1var toDate = endDate.getValue())。 flowFile 在传输时不会具有您期望的任何属性。

您不需要 ExecuteScript 处理器来执行这些操作。使用 UpdateAttribute 和 Apache NiFi 表达式语言来执行简单的日期数学运算。

如果这启动了一个流,使用一个 GenerateFlowFile 处理器来初始创建流文件并将它发送到 UpdateAttribute。如果您从其他地方接收流文件,则只需要 UpdateAttribute(但您需要两个;一个用于创建要添加的天数变量,一个用于执行数学运算 - - 或者如果该增量是常量,则只有一个并将变量引用更改为文字数字)。

定义了动态属性的处理器(template as GitHub Gist):

GenerateFlowFile:
startDate: ${now():toNumber()} <- puts the start date in "number of milliseconds since Jan 1, 1970 00:00:00.000 GMT" format
numberOfDaysToAdd: 8 <- or whatever static or dynamic value you want here
startDateFormatted: ${now():format("YYYY-MM-dd")} <- (optional) startDate in readable format if you need it

UpdateAttribute:
endDate: ${startDate:plus(${numberOfDaysToAdd:multiply(86400000)}):format("YYYY-MM-dd")} <- adds the number of milliseconds in a day * the number of days to the start date and formats it the way you want

您生成的流文件将如下所示:

o.a.n.processors.standard.LogAttribute LogAttribute[id=d06d3a2d-015e-1000-0820-087660238327] logging for flow file StandardFlowFileRecord[uuid=6d26df1a-fd52-407e-b549-0599d6ab3a21,claim=,offset=0,name=1636687405556264,size=0]
--------------------------------------------------
Standard FlowFile Attributes
Key: 'entryDate'
Value: 'Fri Sep 29 18:40:06 PDT 2017'
Key: 'lineageStartDate'
Value: 'Fri Sep 29 18:40:06 PDT 2017'
Key: 'fileSize'
Value: '0'
FlowFile Attribute Map Content
Key: 'endDate'
Value: '2017-10-07'
Key: 'filename'
Value: '1636687405556264'
Key: 'numberOfDaysToAdd'
Value: '8'
Key: 'path'
Value: './'
Key: 'startDate'
Value: '1506735606982'
Key: 'startDateFormatted'
Value: '2017-09-29'
Key: 'uuid'
Value: '6d26df1a-fd52-407e-b549-0599d6ab3a21'
--------------------------------------------------

这将比使用 ExecuteScript 更高效、更稳定。

关于javascript - 尼菲 : code in executeScript processor doesn't work properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46482395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com