kettle的学习笔记

谨以此记录学习kettle的过程,文中将会记录所有我遇到过得问题,如果有能帮助你到的地方,那真是再好不过了。
附上kettle中文官网:http://www.kettle.net.cn/

  • 背景介绍
    由于工作要求,涉及到大量数据汇集工作以及数据分发。因为每时每刻都需要数据回写、汇集、分发等,有多个数据库连接,所以使用etl工具比程序更加便捷。所以使用的是开源的kettle。

什么是kettle

Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。
Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。
Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。 --以上转自百度百科
书说简短,kettle的图形化界面使用非常方便,只需要你理解转换transform和作业jobs两个主要组件就行。转换可以理解为具体的数据处理步骤,内部的核心组件非常多,基本所有你需要实现的功能都在里面。作业就是一些组件组合的项目,主要用来完成整个工作流的控制。

kettle的使用

常用组件

  1. 计算形成新字段:只限算术运算,并且选择固定
  2. 过滤记录:元表某字段按照某个条件分流,满足条件的到一个表,不满足的到另一个表,这两个目标表都必须有。
  3. Switch/Case:和过滤记录类似,可以多个条件判断,并且有默认转向条件,可以完美替换过滤记录组建
  4. 记录分组:group by 组建未能正常按照预期理解运行
  5. 设置为NULL:将某个特定值设置为NULL
  6. 行扁平化:行扁平化,使用与某条件下某名称对应的行数相同的情况
  7. 行列转换:行转成列,使用Row Normalizer组件,事先一定要是根据分组字段排好序,关键字段就是name列字段,分组字段就是按照什么分组,目标字段就是行转列之后形成的字段列表。
  8. 字段选择:选择需要的目的列到目标表,并且量表的对应字段不一样时可以用来做字段映射
  9. 排序:分组前先排序可以提高效率
  10. 条件分发:根据条件分发,相当与informatica的router组件
  11. 值映射:相当与oracle的decode函数,源和目标字段同名的话,只要写源字段就可以了

常用输入组件

  1. 表输入:源表输入
  2. 文本文件输入:文本文件输入
  3. xml文件输入:使用Get Data From XML组件,可以在其中使用xpath来选择数据
  4. JsonInput:貌似在中文环境下组件面板里看不到,切换到英文模式就看到了

常用输出组件

  1. 表输出:表输出
  2. 文本文件输出:文本文件输出
  3. XML文件输出:输出的XML文件是按照记录行存储的,字段名为元素名
  4. Excel文件输出:输出的excel文件是按照记录行存储的,字段名为元素名
  5. 删除:符合比较条件的记录将删除
  6. 更新:注意两个表都要有主键才可以
  7. 插入/更新:速度太慢,不建议使用
  8. 检查字段是否存在:若在则家一个标志位,值可以是Y/N
  9. 等值连接:有关联关系字段可以关联,其它的不关联。
  10. 笛卡尔连接:所有两边的记录交叉连接
  11. write to log:把数据输出到控制台日志里,一般调试时很常用
  12. 空操作:很常用,比如过滤数据,未过滤走正常流程,滤除的数据就转向空操作。我喜欢在转换里用它做开始和结束之类需要分发或汇聚数据流的场景

内置变量

变量可以写在kettle.properties里,工具栏-编辑-编辑kettle.properties文件,可以添加变量,变量设定范围可以在全局或是作业或者本次转换内生效。建议全局通用的设置添加为变量,并且可能会改动的。例如文件路径,数据库动态链接等。作业、转换内的变量可以自己定义常量,自己按需修改即可。

kettle的实践操作

启动时

kettle不能加入到PATH里去,加了执行 kitchen.sh -listrep找不到资源库
在~/.kettle里有重要的kettle.properties和repositories.xml文件,服务器部署的时候需要拷贝上去
spoon图形界面一般用来调试,跑多条数据会很慢。可以编写脚本启动kettle,这样会比较快速。
Unable to get module class path. (java.lang.RuntimeException: Unable to open JAR file, probably deleted: error in opening zip file) 需要删掉 <kettle_home>/system/karaf/caches/下的所有文件
启动时闪退时需要删掉~/.kettle/db.cache打头的文件就可以了。如果不能解决问题,建议启动kettle的debug模式,错误信息将会打印在控制台中。按照控制台的错误去百度答案更有用,一般说更改内存大小那个,除非你的机器内存不够,不然一般跟这个没啥关系,都是网络复制粘贴出来的。不过涉及到大规模的数据迁移,还是需要控制数据大小和内存分配。

防内存溢出和提高性能的处理办法

  1. 数据量较大时一定要使用分页机制,控制每个批次导入5000~10000
  2. 需要在分页循环中首先用一个独立的转换来计算出当前批次的用户ID数组,页码数量,总记录数以及维度表的数据,比如有日期维度表,那么就需要算出当前批次要处理的日期时间数组,最后把这些数据存入到全局变量里面去。这样在后续步骤就可以取出这些全局变量内容按照分页批次进行迁移了。 2.分页要通过一个表输入根据传入的每页记录数动态计算出总页数,并把总页数,总记录数存入全局变量,然后每处理一行计数器加1,截止条件就是总记录数<=处理过的记录数,从而实现的分页循环。
  3. 分页变量务必要通过命名参数-param来传递,这样在生产环境万一碰到了数据过大造成内存泄漏,可以通过参数快速调整
  4. 分页需要动态在模型中计算出页码数和总记录数,可以用个sql来搞定
select count(1) totalitemcount,round(CEIL(count(1)/${pagesize})) pagecountfrom table_namewhere create_time between unix_timestamp('${startdate}') and unix_timestamp('${enddate}')

之后的结果(totalitemcount,pagecount)用设置变量组件存入变量里就ok了 5. 注意数据量较大时不要使用记录复制到结果组件,不然一定会内存溢出 6. kettle的很多功能都有对应的纯sql实现方法,比如加字段,比如排序和空值的处理,纯sql的实现方式要比kettle的方式快很多,而且对内存的消耗也会小很多。 7. 可以设置几个变量来优化性能 KETTLE_MAX_LOG_SIZE_IN_LINES=5000 #内存里最多记录多少行日志 KETTLE_MAX_LOG_TIMEOUT_IN_MINUTES=1440 #kettle日志的保留时间,单位是分钟 KETTLE_MAX_JOB_ENTRIES_LOGGED=1000 #内存中保留多少实体返回结果日志 KETTLE_MAX_JOB_TRACKER_SIZE=1000 #内存里最多保留多少job跟踪记录 KETTLE_MAX_LOGGING_REGISTRY_SIZE=1000 #内存里记录多少实体 来优化内使用情况(在~/.kettle/kettle.properties里设置)
5. 以上都是从别处复制过来的,我觉得写得很好,因为没有这么使用过,记录下可能有用。但是第一条那个分页,kettle自己设置一次性多少条,一般1000-2000条性能是最高的(服务器测试的数据,因人而异。但是最好不要超过10000),它会自动给你分页查询,和上述的的分页不清楚那个性能更好。
未完待续…

kettle学习笔记相关推荐

  1. kettle学习笔记(三)——kettle资源库、运行方式与日志

    kettle学习笔记(三)--kettle资源库.运行方式与日志 一.kettle资源库 资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中. 资源库可以使多用户共享转换任 ...

  2. 【Kettle学习笔记】从Hbase导入数据至Mysql

    1.连接Hadoop集群与MySQL 1-1 下载当前集群的Hbase配置文件 1-2 解压改配置文件至cdh510目录下 1-3 修改D:\kettle\data-integration\plugi ...

  3. kettle学习笔记(二)——kettle基本使用

    一.子程序功能和启动方式介绍 Spoon.bat: 图形界面方式启动作业和转换设计器. Pan.bat: 命令行方式执行转换. Kitchen.bat: 命令行方式执行作业. Carte.bat: 启 ...

  4. Kettle 学习笔记 — 资源库

    版权声明:本文为博主原创文章,于2021年4月17日首发于CSDN,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u011046671/article/deta ...

  5. 【Kettle】学习笔记

    学习笔记 一.简介 1.1.ETL简介 1.2.Kettle简介 1.2.1.Kettle 1.2.2.Kettle的两种设计 1.2.3.Kettle的核心组件 二.安装部署 三.Kettle核心概 ...

  6. 校园课程 ·学习笔记 ·导航目录

    文章目录 前言 目录 大二(下) <编码规范和测试方法--C/C++版> <SQL高级应用和数据仓库基础(MySQL版)> 大三(上) <计算机网络> <计算 ...

  7. 初级Java学习笔记总结

    java高并发解决方案:     1.页面静态:静态访问消耗的资源少             信息录入然后生成静态页面以供访问     2.数据库集群和库表散列             主-从数据库关 ...

  8. 算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记

    算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记 前言 单调队列 场景举例(RMQ) 应用-维护区间最值的方式 数据结构-自行设计单调队列 代码实现(java) 例题分析(略) 总 ...

  9. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

最新文章

  1. 508人决战,北大占绝对优势,2021阿里全球数学决赛真题发布!
  2. python百度百科api-Python即时网络爬虫:API说明
  3. php和python对比-从PHP与Python的语言比较去了解什么是图灵完备
  4. 首发福利!全球第一开源ERP Odoo系统架构部署指南 电子书分享
  5. Deep Learning运行所需的硬件配置(转)
  6. python之路_前端基础之Bootstrap 组件
  7. 【Set jsonObj = toJson( jsonString )】创建JSON实例
  8. 阿里云混合云Apsara Stack 2.0发布 加速政企数智创新
  9. ConvMLP:你见过长得像CNN的MLP吗?UOUIUC提出了用于视觉任务的层次卷积MLP
  10. 京东也准备向社区团购进发了?
  11. java中int和Integer对比的一些坑
  12. iOS开发: info访问权限配置
  13. app渗透实战案例—Spring Boot Actuator未授权到脱库
  14. android微信版本怎么升级,安卓微信怎么更新到最新版本?
  15. MySQL数据库维护手册
  16. 机票预订系统活动图_机票预订系统程序实施方案说明书模板(面向对象)
  17. 页面提交处理时候显示“正在处理,请稍后……”,防止二次提交功能。
  18. 高德地图zoom设置为小数
  19. 利用计算机的认识与感受制作海报,手绘pop海报在大学中的应用和现实意义
  20. 致互联网人:一篇文章让你了解互联网公司的职位架构以及职能要求

热门文章

  1. FFA-Net:文章理解于代码注释
  2. Python学生管理系统代码
  3. matlab一阶差分并作图,某种股票价格的数据的时间序列模型的建立及分析
  4. 当把串口初始化时,程序卡死的问题
  5. 10ˉ6怎么用c语言表示,大写的程怎么写
  6. 微信小程序 Canvas 自定义时间显示器 数码管显示
  7. 《数字图像处理(第三版)》 第三章 数字图像处理 笔记3 (直方图处理 - 直方图均衡)
  8. 使用elastic-job 发生Invalid bean definition with name异常
  9. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java防疫物资捐赠系统r54w0
  10. 数据库mysql学习笔记