[Kettle] CST时间格式转yyyy-MM-dd HH:mm:ss格式

本文介绍了如何在Kettle中处理CST格式的时间戳,将其转换为yyyy-MM-dd HH:mm:ss格式。在处理上游提供的.dat加密文件时,遇到CST时间字段的问题,通过尝试直接转换失败后,使用JavaScript组件成功实现了转换。具体操作包括从CSV文件读取CST时间数据,通过JavaScript代码进行格式转换,再通过字段选择和表输出将转换后的日期写入PostgreSQL的目标表。

        最近做需求遇到一个问题,上游给了一个.dat 加密文件,解密后发现有个时间戳字段是用CST格式存储,举例:Thu Jul 22 00:58:32 CST 2010, 但是目标表字段数据类型设计成timestamp格式,要用Kettle 抽取数据,刚开始直接对这个字段数据类型转为 Date 类型,格式为 yyyy-MM-dd HH:mm:ss,经过反复测试发现不行。

于是另谋出路 能否用Kettle 中的 Java代码 和JavaScript 代码组件实现呢,摸索之后,最终采用

JavaScript组件实现。

数据源:

        本次测试用date.csv文件作为数据源,csv文件存储的CST时间数据格式如下:

 

目标表:

        PostgreSQL库创建目标表,用来接收。

create table t_string_conver_to_date(join_date timestamp without time zone );

ETL 程序设计程序

 文本文件输入: 配置读取的文件为 date.csv,接收的字段IN_DATE,数据类型为String,注:这里不能设置为Date类型

JavaScript代码: 主要是将CST格式转换成yyyy-MM-dd HH:mm:ss格式。

//自定义函数
function dateFormat (date, format) {
    date = new Date(date);
    date.setHours(date.getHours()-14);
    var o = {
        'M+' : date.getMonth() + 1, //month
        'd+' : date.getDate(), //day
        'H+' : date.getHours(), //hour
        'm+' : date.getMinutes(), //minute
        's+' : date.getSeconds(), //second
        'q+' : Math.floor((date.getMonth() + 3) / 3), //quarter
        'S' : date.getMilliseconds() //millisecond
    };

    if (/(y+)/.test(format))
        format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));

    for (var k in o)
        if (new RegExp('(' + k + ')').test(format))
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));

    return format;
}

var DATE_OUT = dateFormat(IN_DATE,"yyyy-MM-dd HH:mm:ss")   //函数调用,输出字段资格,IN_DATE为文本文件传过来的数据流

 设置如下,用DATE_OUT接收,类型为String。

 

 字段选择: 字段选择是将 DATE_OUT 强转为 DATE类型,并且格式为yyyy-MM-dd HH:mm:ss。

 表输出: 将DATE_OUT数据写入到目标表 t_string_conver_to_date.join_date 字段。

 以上步骤都设置到了,启动Kettle 转换程序,然后查看表数据,验证OK。

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值