Kettle 使用js脚本生成新的行和列

示例:根据开始和结束日期获取中间的所有整点时间

js脚本

// 自定义补零函数
function padZero(num) {
    return num < 10 ? '0' + num : num.toString();
}

// 假设 start_time 和 end_time 是传入的起始和结束时间字符串
// 例如:"2025-04-08 08:21:22"
var startStr = start_time;
var endStr = end_time;

// 将字符串转换为 Date 对象
var start = new Date(startStr.replace(/-/g, '/'));
var end = new Date(endStr.replace(/-/g, '/'));

// 把起始时间设置为整点
start.setMinutes(0);
start.setSeconds(0);
start.setMilliseconds(0);

// 存储整点时间的数组
var hourlyData = [];

// 循环生成整点时间
var current = new Date(start);
while (current <= end) {
    // 将 Date 对象转换为字符串
    var formattedTime = current.getFullYear() + '-' + 
                        padZero(current.getMonth() + 1) + '-' + 
                        padZero(current.getDate()) + ' ' + 
                        padZero(current.getHours()) + ':00:00';
    hourlyData.push(formattedTime);
    // 时间增加 1 小时
    current.setHours(current.getHours() + 1);
}

// Alert()
for (var i = 0; i < hourlyData.length; i++) {
    var hour =hourlyData[i];
    // 使用 createRowCopy 函数创建一个新行
    var row = createRowCopy(getOutputRowMeta().size());
    //这里需要特别注意,为什么要获取原数据的长度作为新内容的起始索引呢?
    //因为新建的行还是会携带有输入的列的,所以如果使用0开头赋值,则会覆盖掉原列,并且字段名不对应。
	var index = getInputRowMeta().size(); 
	row[index]=hour; 
	putRow(row);
}
// 保证原始的数据行,不会被放入输出流中。 如果不带这一句,则原行还是会输出一行造成重复数据。
trans_Status = SKIP_TRANSFORMATION;


 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值