kettle获取系统时间,设置变量,获取变量

kettle获取系统时间,设置变量,获取变量

两种方式

  1. 正则表达式
  2. Java代码

一、新建转换

  • 新建转换,在输入中选择获取系统信息
    获取系统信息
    编辑

正则表达式

  • 在脚本中选择正则表达式脚本
    正则表达式脚本
为什么要选择正则表达式脚本呢(简单,好用)
2023/07/29 13:44:27.242  -- 这是我们获取的系统日期格式
通过如下正则表达式
(\d{4})/(\d{2})/(\d{2})\s\d{2}:\d{2}:\d{2}\.\d{3}
将数据化为三个捕获组
第一个捕获组为2023
第二个捕获组为07
第三个捕获组为29
分别对应年月日,方便后续指标计算

输入正则表达式

  • 在核心对象的作业中选择设置变量
    设置变量
    添加字段并设置为 Valid in the Java Virtual Machine 类型
    设置变量
  • 将上述连接起来
    连接

二、使用变量

  • 再开一个转换,在作业中选择获取变量
    获取变量
  • 在输入中选择表输入
-- 一下面这段sql为例
-- 从orders表中增量获取前一天的数据
select *,date_sub(str_to_date(?,'%Y-%m-%d'), INTERVAL 1 DAY) dt 
from orders where substr(createTime,1,10) = date_sub(str_to_date(?,'%Y-%m-%d'), INTERVAL 1 DAY);
-- 其中的问号代表将要获取的参数,类似与在java中编写的insert into table value(?,?,?,?,?,?);
-- 有几个问号就需要传递几个值

表连接

  • 编辑获取变量,因为其中有两个问号所以需要传入两个值
    连接

  • 在输出中选择 插入/更新
    输出

  • 连接保存
    在这里插入图片描述

关闭所有转换,在主对象的作业中新建一个作业

定时任务
运行
在这里插入图片描述

Java代码

新建转换,命名获取昨天时间
在这里插入图片描述
在脚本中选择java代码

选择,双击main函数,会自动生成代码
在这里插入图片描述
编辑代码

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
  if (first) {
    first = false;
  }

  Object[] r = getRow();

  if (r == null) {
    setOutputDone();
    return false;
  }

 	r = createOutputRow(r, data.outputRowMeta.size());

  	String foobar = get(Fields.In, "dt").getString(r);
 	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    // 创建Calendar对象,并设置为传入的时间
    Calendar calendar = Calendar.getInstance();
    try {
        calendar.setTime(format.parse(foobar));
    } catch (ParseException e) {
         throw new RuntimeException(e);
    }

    // 将Calendar的日期减1,即为昨天的日期
    calendar.add(Calendar.DATE, -1);

    // 获取昨天的日期
    Date yesterdayDate = calendar.getTime();
    // System.out.println("昨天的时间:" + yesterdayDate);
    // 将昨天的日期格式化为指定格式
    String yesterdayStr = sdf.format(yesterdayDate);
    // 设置需要输出的字段
  	get(Fields.Out, "yesterday").setValue(r, yesterdayStr);


  // Send the row on to the next step.
  putRow(data.outputRowMeta, r);

  return true;
}

设置输出字段
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个字段需要和代码中的输入字段一样
在这里插入图片描述
在这里插入图片描述
测试
在这里插入图片描述
设置变量,作业中选择设置变量
在这里插入图片描述
在这里插入图片描述
测试获取变量,和上面正则表达式一样
在这里插入图片描述
更新sql

select *,str_to_date(?,'%Y-%m-%d') dt 
from order_goods where substr(createTime,1,10) = str_to_date(?,'%Y-%m-%d');

在这里插入图片描述
测试即可
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值