`

Kettle的第二个实践--数据获取并转换

 
阅读更多
Kettle的第二个实践--数据获取并转换

需求:

kettletest1数据库中有table_source数据表,结构如下:

Id                主键
t_id             数据时间
part_id        实例ID
yg               数据字段1
wg              数据字段2


该表中的数据对于不同的实例ID,一分钟一条数据,t_id字段表示数据的时间,精确到分钟。

kettletest2数据库中有table_target数据表,结构如下:

Id                     主键
marketdate      数据日期,格式为 yyyy-MM-dd
pointtime        时间,格式为 HH:mm
pointnumber   时间的数字表示,00:01表示为1,00:00表示为1440
plantcode        实例Code
yg                    数据字段1
wg                   数据字段2


需定期将table_source表中的数据获取至table_target表中,并进行如下处理:

1、将t_id数据时间字段拆分为三个字段,分别为marketdate、pointtime、pointnumber。

        a、marketdate取t_id的日期部分。
        b、pointtime取t_id的时间部分。
        c、pointnumber为时间的数字表示,等于hour*60+minute。
        d、但当t_id的时间为某日的00:00时,需将其转化为24:00,并且marketdate需取日期的前一天。如t_id为2008-12-04 00:00,则marketdate为2008-12-03,pointtime为24:00,pointnumber为1440。

2、将part_id字段映射为plantcode字段,并根据如下规则进行转换:
        part_id                 plantcode
         3206                        P01
         3207                        P02
         3208                        P03


测试中使用的数据库均为mysql数据库。
实战:

整个转换工作共分为三个步骤,如下图:




1、定义需获取的数据的日期



2、删除table_target表中已有数据, 注意一定要将“执行SQl语句”面板中的“变量替换”要选上 ,否则SQL语句中的变量不会被替换,我刚开始没注意到这个地方,找问题找了半天。



3、获取table_source中的数据,并将其插入table_target表




3-1、获取table_source表的数据



3-2、值映射



3-3、字段选择



3-4、对t_id字段进行处理,增加了pointnumber字段。 在这一步骤中发现kettle的一个bug,就是不能在JavaScript中使用str2date函数 ,错误的具体信息参见:http://jira.pentaho.com/browse/PDI-1827。这个问题也折腾了好长时间,刚开始怎么也想不通这个函数使用时怎么会报错呢,后来只好从字符串中截取年、月、日信息。

该步骤中还存在另外一个使人困惑的问题,就是点击“测试脚本”按钮,会报错,但是执行job和transformation时则不会报错。




3-5、增加pointnumber字段至输出结果中



3-6、插入数据至table_target表



3-4步骤中的JavaScript代码如下:
var pointTimeStr = pointtime.getString();
var pointnumber = 1;

if (pointTimeStr == "00:00") {

    var marketDateStr = marketdate.getString();
    var marketDateYear = substr(marketDateStr, 0, 4);
    var marketDateMonth = str2num(substr(marketDateStr, 5, 2))-1;
    var marketDateDay = substr(marketDateStr, 8, 2);

    var date = new Date();
    date.setYear(marketDateYear);
    date.setMonth(marketDateMonth);
    date.setDate(marketDateDay);

    var temp1 = dateAdd(date, "d", -1);
    marketdate.setValue(date2str(temp1, "yyyy-MM-dd"));
    pointtime.setValue("24:00");

    pointnumber = 1440;
} else {    
    var hourStr = pointTimeStr.substr(0, 2);
    var hour = str2num(hourStr);
    var minuteStr = pointTimeStr.substr(3, 5);
    var minute = str2num(minuteStr);
    
    pointnumber = hour * 60 + minute;
}


至此,整个转换工作完成,小结一下:

    如果对kettle等etl工具比较熟悉的话,使用etl工具进行数据转换、抽取等事情还是比较方便的,比起写程序还是有优势的。但是这个转换过程中遇到的kettle的两个bug比较让人头疼,觉得kettle好像还不是很稳定。

reference:http://www.blogjava.net/robbie/archive/2008/12/14/246271.html
  • 大小: 18.5 KB
  • 大小: 99 KB
  • 大小: 76.9 KB
  • 大小: 27.4 KB
  • 大小: 48.4 KB
  • 大小: 33.1 KB
  • 大小: 36.1 KB
  • 大小: 54.8 KB
  • 大小: 36.1 KB
  • 大小: 43.2 KB
分享到:
评论

相关推荐

    kettle实验转换程序-实验记录.rar

    4. **实验二-合并多个excel文件**:Kettle支持读取Excel文件,并能将多个文件合并成一个统一的数据集。这个实验可能讲解了如何利用Kettle的Excel输入步骤和聚合步骤来完成这一操作。 5. **kettle作业设计**:作业是...

    《ETL数据整合与处理(Kettle)》教学教案 —02源数据获取.pdf

    在Kettle中,建立与数据库的连接是数据获取的第一步。Kettle支持多种数据库类型,如MySQL。教师将指导学生如何配置数据库连接参数,包括主机名、端口、数据库名、用户名和密码。同时,还会讲解如何共享和停止数据库...

    Kettle - Spoon - 4.1.0 操作手册

    **第二章:建立转换** 1. **从文件中读数据**:PDI能够处理各种文件格式,包括CSV、Excel和XML。这个章节讲解如何配置输入步骤来读取这些文件中的数据。 2. **一次读入多个文件**:在实际项目中,可能需要同时处理多...

    kettle最新资料.ppt

    总结,PDI是一个强大且灵活的ETL工具,通过深入学习和实践,可以有效地管理和处理各种数据集成任务,为数据仓库和数据分析提供坚实的基础。无论是在企业级数据仓库建设,还是在大数据项目中,PDI都能展现出其强大的...

    3万字38页《数据仓库知识体系》.pdf

    在数据模型设计方面,文档详细阐述了三范式(第一范式、第二范式、第三范式)及反范式化的设计原则,并讨论了OLAP和OLTP中范式化的优缺点。了解范式化与反范式化在数据仓库设计中的应用,对提高数据库性能具有重要...

    大数据保姆级别教程sql.plsql.bi.ketlle.Linux..hadoop.hive.shell.sqoop.数仓

    大数据技术在当今信息化社会中扮演着至关重要的角色,它涵盖了...通过这个全面的教程,学习者将能够逐步建立起对大数据技术的整体理解和实践能力,从数据的获取、处理到分析和呈现,覆盖了大数据生命周期的各个环节。

    程序员文摘第25期-精选最有价值的文章

    14. **Kettle变量方式迁移数据**:Kettle(Pentaho Data Integration)是一个ETL工具,可以用来转换和加载数据。使用变量的方式可以实现数据迁移的灵活性和复用性。 15. **MySQL优化技巧**:MySQL数据库的优化涉及...

Global site tag (gtag.js) - Google Analytics