kettle 设置临时变量使用-默认当前日期

本文介绍如何在Kettle中使用JavaScript代码组件设置临时变量,包括声明当前时间并用于数据同步,以及设置默认变量如是否已删除的状态。通过具体示例展示了如何在数据处理流程中灵活运用变量。

kettle 设置临时变量使用-默认当前日期

kettle 设置临时变量使用-默认当前日期

使用场景
kettle在同步数据中需要使用当前日期为字段,同步出入到数据库中,或者其他的默认变量;

解决方法
使用kettle中的【javaScript代码】组件进行变量声明,例如声明当前时间包含时分秒,还有删除表示默认字段。
在这里插入图片描述
系统当前时间

Date.prototype.Format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "H+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
 
//当前时间
var currentDatetime = new Date().Format("yyyy-MM-dd HH:mm:ss");

//是否已删除(0:未删除,1:已删除)
var is_deleted = 0;

接下里就可以进行【插入/更新】中的条件使用,或者其他操作使用都可以。

如果你有更好的方式进行变量声明,请留言哦,我会回复你的o( ̄︶ ̄)o

<think> 我们注意到用户之前的问题是关于在Kettle使用“获取变量”功能获取当前日期并应用到FTP文件接口,但现在的提问更聚焦于“使用获得变量组件获取当前日期的方法”。因此,我们需要调整重点,详细解释在Kettle中如何通过内置功能获取当前日期变量,而无需编写JavaScript代码。 在Kettle中,获取当前日期变量有两种常用方法: 1. 使用“获取系统信息”步骤(Get System Info)来生成日期变量。 2. 在作业(Job)中使用设置变量”(Set Variables)步骤,结合Kettle的预定义变量。 下面将分别介绍这两种方法,并说明如何在转换中使用这些变量。 方法一:在转换中使用“获取系统信息”步骤 步骤: a. 在转换中,添加一个“获取系统信息”步骤(位于“输入”类别下)。 b. 在步骤配置中,点击“获取字段”标签页,添加一行,选择类型为“今天 00:00:00”(表示当前日期,时间部分为0)或“现在”(包含当前日期和时间)。 c. 给这个字段起一个名字,例如`today`。 d. 后续步骤可以直接引用这个字段。如果需要在转换的其他地方作为变量使用,可以通过“设置变量”(Set Variables)步骤将其设置为转换变量或全局变量。 但是,如果用户希望直接获得一个变量(而不是作为字段),可以在作业级别设置。 方法二:在作业中使用设置变量”步骤(推荐) 通常,我们在作业中设置变量,然后在转换中使用。步骤如下: 1. 创建一个作业(Job)。 2. 在作业中,添加一个“设置变量”步骤(Set Variables,位于“通用”类别下)。 3. 配置该步骤: - 在“字段”标签页中,添加一个字段,名称可以自定义(例如`current_date`)。 - 在“变量”标签页中,设置变量活动类型(通常选择“父作业”或“根作业”,取决于变量的作用范围)。 - 在“字段”标签页中,字段的值可以使用Kettle的预定义变量,例如: - 使用`${Internal.Transformation.Filename.Directory}`等预定义变量不合适,因为我们需要当前日期- 实际上,我们可以使用计算器(Calculator)来生成日期,但“设置变量”步骤本身不能直接生成日期。因此,我们可以在转换中生成日期字段,然后在作业中通过“设置变量”步骤将其设置变量。 另一种更直接的方法:使用“获取系统信息”步骤生成字段,再通过“设置变量”步骤将其设置变量。 我们可以在作业中这样操作: a. 在作业中,先添加一个转换(Transformation),该转换中: - 使用“获取系统信息”步骤获取当前日期(作为字段)。 - 使用设置变量”步骤(Set Variables,在转换中位于“作业”类别下)将该字段设置变量(作用域可以是“父作业”或“根作业”)。 b. 然后,在作业中添加FTP操作步骤(例如“FTP下载”),在文件名中使用变量。 但是,Kettle也提供了一种在作业中直接使用JavaScript脚本设置变量的方法(通过“执行SQL脚本”旁边的“JavaScript”步骤),但用户要求使用“获得变量组件”。 其实,Kettle有一个专门生成日期变量的简单方法:使用“生成记录”步骤结合公式。 方法三:使用“生成记录”步骤和公式(在转换中) 步骤: a. 添加“生成记录”步骤(Generate Rows),生成一条记录。 b. 添加一个“计算器”(Calculator)步骤,使用计算器中的“Date A”函数(当前日期时间)并格式化为需要的字符串。 或者,更简单的是,在“生成记录”步骤中,我们可以直接使用公式来生成当前日期。但是,“生成记录”步骤通常用于生成固定数量的记录,字段值可以是常量表达式。不过,它不支持直接使用动态函数。 因此,我们回到方法一,并在转换中设置变量。 为了更清晰,下面给出一个在转换中获取当前日期设置变量的步骤(方法一扩展): 转换中的步骤: 1. 获取系统信息(Get System Info):添加一个字段,类型选择“现在”(包含日期和时间)或“today 00:00:00”(仅日期),得到字段`today`。 2. 使用“选择字段值”(Select Values)步骤,将`today`字段转换为字符串(如果需要的话)。 3. 使用设置变量”(Set Variables)步骤(在转换中,位于“作业”类别下): - 在“字段名”中填入`today`(或者你想设置变量名,如current_date)。 - 在“变量名”中填入你想设置变量名称,例如`CURRENT_DATE`。 - 设置作用范围:通常选择“父作业”或“根作业”(如果是在作业中调用该转换,则父作业有效)。 然后在作业中调用这个转换,之后在作业的后续步骤(比如FTP步骤)中就可以使用`${CURRENT_DATE}`变量了。 然而,如果用户不想在转换中设置,而是想在作业中直接设置变量,可以使用设置变量”作业步骤(Job Entry)结合Kettle的预定义变量。但作业步骤中的“设置变量”不能直接生成当前日期,它需要从以前步骤继承变量使用固定值。 因此,我们通常采用在转换中生成并设置变量的方法。 但Kettle还提供了一个更简单的方法:在作业中使用“获取系统信息”作业步骤。然而,标准Kettle作业步骤中没有直接获取系统信息并设置变量的作业步骤(转换中有)。所以,我们一般使用转换来实现。 总结:最常用的方法是创建一个转换,在转换中使用“获取系统信息”步骤获取当前日期,再通过“设置变量”步骤将其设置为作业级变量,然后在作业中的FTP步骤使用变量。 接下来,我们将详细说明在转换中生成当前日期变量的步骤: 步骤1:创建转换 在转换中添加以下步骤: 1. “获取系统信息”(Get System Info) - 添加一个字段,选择类型为“现在”(now)或“today 00:00:00”(today)。这里我们选择“today 00:00:00”表示只取日期部分。 - 将字段命名为`current_date_field`。 2. 可选:格式化日期- 如果需要特定格式,可以在后面添加“计算器”(Calculator)步骤,使用“Date/Time format”函数进行格式化,将日期字段转换成字符串(例如YYYYMMDD)。 - 或者,也可以使用“选择字段值”(Select Values)步骤,将日期字段改为字符串类型,并指定格式(在Meta-data标签页中设置格式,如yyyyMMdd)。 3. “设置变量”(Set Variables) - 在“字段名”中选择上一步得到的日期字段(例如`current_date_field`)。 - 在“变量名”中设置变量名称,例如`CURRENT_DATE`。 - 设置作用范围:通常选择“根作业”(Root Job)或“父作业”(Parent Job),这样在后续作业步骤中都可以使用。 步骤2:在作业中调用该转换 1. 创建一个作业。 2. 在作业开始部分,添加一个“转换”作业步骤,指向刚刚创建的转换。 3. 然后添加FTP步骤(如“FTP下载”),在远程文件名中填入:`data_${CURRENT_DATE}.csv`。 注意:如果转换中设置的作用范围是“父作业”,那么该转换必须是作业的一个步骤(即被作业包含),这样在后续步骤中才能使用。 另一种更简单的方法(无需转换):在作业中使用JavaScript脚本作业步骤 虽然用户要求使用“获得变量组件”,但如果没有直接的方法,我们可以提供另一种替代方案。Kettle作业中有一个“JavaScript”作业步骤,可以编写JavaScript代码设置变量: 在作业中: 1. 添加“JavaScript”步骤。 2. 在脚本中: ```javascript var date = new Date(); var currentDate = dateFormatter.format(date, "yyyyMMdd"); parent_job.setVariable("CURRENT_DATE", currentDate); ``` 3. 注意:需要启用“兼容模式”(因为默认的JavaScript引擎可能不同)。 但这种方法需要用户编写脚本,且可能不如转换方法直观。 因此,我们推荐使用转换方法,因为它是纯图形化操作,无需编码。 最后,针对用户之前的问题(如何应用到FTP文件接口),我们已经说明在FTP步骤的文件名字段中直接使用变量替换即可。 下面,生成相关问题: </think> ### 在Kettle使用"获取变量"组件获取当前日期的方法 在Kettle(Pentaho Data Integration)中,**获取当前日期变量**主要通过以下两种方法实现,无需编写代码即可完成: #### 方法1:使用"获取系统信息"组件(推荐) 1. **添加组件** 在转换中拖入`获取系统信息`组件(Input → Get System Info) 2. **配置日期字段** - 点击"获取字段"标签页 → 点击"名称"列添加新行 - 在"类型"下拉菜单选择: ✅ `today 00:00:00`(获取当日日期,不带时间) ✅ `now`(获取当前日期+时间) - 自定义字段名称(如 `current_date`) ```plaintext [配置示例] 名称: current_date 类型: today 00:00:00 ``` 3. **后续使用** 后续步骤可通过 `${current_date}` 引用该变量 #### 方法2:使用"生成记录"组件 1. **添加组件** 在转换中拖入`生成记录`组件(Input → Generate Rows) 2. **配置日期字段** - 在"字段"标签页添加新字段(如 `current_date`) - 在"类型"列选择 `Date` - 在"值"列输入函数: ```plaintext date_sub(current_date(), 0) -- 获取当日日期 或 now() -- 获取当前时间戳 ``` ### 应用示例:FTP文件接口中使用日期变量 配置FTP步骤时,在文件名参数中直接引用变量: ```plaintext 远程文件名:/data/orders_${current_date}.csv ``` 系统会自动替换变量为实际日期值(如 `orders_20240522.csv`) > **最佳实践**: > 1. 在作业(Job)层面使用`设置变量`组件,可使变量全局生效[^1] > 2. 日期格式转换可在变量生成后,通过`选择/改名值`组件调整为`yyyyMMdd`等格式 > 3. 对于动态文件名,建议开启FTP步骤的"动态文件名"选项
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值