Kettle环境变量在ETL工程上的应用

标签: kettle 环境变量 etl | 发表时间:2014-01-02 00:33 | 作者:vase
出处:http://www.iteye.com

    好久没更新博文,最近临近离职,事情少了,有空停下来总结总结这段时间的东西。    今天先记录下Kettle环境变量的应用。

    一个好的环境变量的使用,在业务变更或者环境变动后,只需要很少工作量的修改即可完成。我们把变量分成系统环境变量和业务变量,系统环境变量是指那些在ETL中指定的系统级资源配置,如数据库信息、日志文件路径等等,这些变量一旦设定,不会经常变动;业务变量指跟当前ETL执行处理的内容有关,如日期、产品ID等等,跟运行时有关。开始我们很容易的会想到将经常变动的设为业务变量,在运行时通过参数传入,而往往忽略那些不常变动的内容被写死,一旦遇到环境迁移或者像增加udf的自定义(这个可用在数据库连接高级设置中,在连接成功后先执行若干SQL,后边才执行业务SQL,会在后边做详细点的介绍),就需要做大量更新配置工作。

     系统环境变量可设置到 $HOME/.kettle目录下的kettle.properties中,但是在多工程ETL服务器上这样的设置容易导致混淆,这时可以把每个工程中的系统变量提取到当前工程kettle配置的目录下,如我们有bi、dw、finance等多个工程,在每个工程目录下建common目录作为公共配置目录,再将数据库信息配置文件db.properties放到该目录下,并增加一个transformation来读取该配置文件,然后解析文件中的键值对,最后将这些键值对设置成系统变量,如下三个步骤:1. 读取文件内容,根据“=”进行K-V分隔;2. 保留key、value,去除其他有步骤1产生的字段;3.通过javascript将k-v设置成环境变量 (这里要感谢下Jayon同学贡献的transformation)


 

读取文件配置



 



 

通过selected插件只保留key和value字段



 

通过javascript动态将k-v设置成系统变量
 

 

这样,就可以在后边的transformation中的数据库连接中直接使用db.properties 中定义好的变量,一但环境发生变动(如服务器迁移等),只需要修改配置文件即可。

 

本地测试小技巧:可以根据负责工程的内容,将使用到的配置变量copy到本地$HOME/.kettle/kettle.properties中,在启动spoon后会自动加载kettle.properties中的变量,这样就可以无障碍在本地进行测试了。

 

 接下来说下数据库连接的高级配置中,在连接成功后执行的SQL如何配置。

在数据库连接成功后,我们经常需要对当前session设置一些内容,如Mysql设置字符集set names gbk; Hive中定义自定义函数,等等;因为Table Input插件中的SQL填写框中只能写一条当前业务SQL,这些对session预设置的内容,可以放到高级选项中。



 如上图,我们定义了好多自定义函数来实现我们自己特有的业务逻辑;配置到这里是没问题的,但是这样写死,一旦以后项目的包名规则重构,就需要全部逐个进行进行修改kettle配置。其实这个预处理也可以定义为变量,虽然UI边上没有可使用变量的小图标。

这里变量的定义需要注意一点,在properties文件定义中,换行符意味着当前值的结束;为了阅读方便,我们还是有必要每条SQL写在一行或者多行上,换行是需要加转义符“\",如下

HIVE_PRE_SQL = add jar /data/lib/java/hive/udf/Hive_UDF.jar; \
                             add file /data/lib/java/hive/udf/GeoIP.dat;


 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [kettle 环境变量 etl] 推荐:

Kettle环境变量在ETL工程上的应用

- - 行业应用 - ITeye博客
    好久没更新博文,最近临近离职,事情少了,有空停下来总结总结这段时间的东西.     今天先记录下Kettle环境变量的应用.     一个好的环境变量的使用,在业务变更或者环境变动后,只需要很少工作量的修改即可完成. 我们把变量分成系统环境变量和业务变量,系统环境变量是指那些在ETL中指定的系统级资源配置,如数据库信息、日志文件路径等等,这些变量一旦设定,不会经常变动;业务变量指跟当前ETL执行处理的内容有关,如日期、产品ID等等,跟运行时有关.

ETL工具Pentaho Kettle的transformation和job集成

- - CSDN博客推荐文章
Kettle是一款国外开源的etl工具,纯java编写,数据抽取高效稳定(数据迁移工具). Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制. 2.1.       transformation实现解析.

ETL之metadata (讲了pentato 的kettle 的元数据) - sunnywang - IT博客

- -
--  商业智能平台研究:ETL之metadata. 元数据的定义就是:描述数据的数据,你非要问什么描述元数据,还是元数据本身,UML中也有这种概念,只不过是描述的对象不一样罢了.     让我们解释的更加通俗易懂一些吧,在javaSE中也有metadata的概念,最早的就算是JavaDoc了,在5.0之后,Annotation就是大量的使用metadata了,这是关于源代码的数据,具体来说就是关于Java的类、方法、字段等关联的附加数据.

Kettle 创建 Transformation

- - CSDN博客推荐文章
1.第一步,先准备数据和工具. 安装好mysql以及客户端工具.   `status` int(11) NOT NULL COMMENT '对内= 1 ,对外= 2',. 以上我们建了四个表,客户customer,账户account,交易记录trade,交易明细表trade_detail. 用下面的sql查询一下得到每个客户下每个账户的交易明细.

kettle执行job

- - 互联网 - ITeye博客
ETL高级教程kettle. 1,Kettle跨平台使用.     例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下:.     1)进入到Kettle部署的路径.     2)执行 chmod *.sh,将所有shell文件添加可执行权限.

Java环境变量Classpath

- - 译言-电脑/网络/数码科技
Classpath是一个参数,它的值可以通过命令行指定,或者通过环境变量来指定. Classpath这个参数的值,被Java虚拟机或者Java编译器所使用,它告诉Java虚拟机机,Java编译器,去哪里寻找用户定义的类和包. 与传统的动态载入行为类似,当执行一个Java程序的时候,Java虚拟机会寻找和载入类(但是,只有当这个类被用到的时候,Java虚拟机才会载入它.

ETL概述(原创)

- - ITeye博客
ETL,Extraction- Transformation-Loading的缩写,即数据抽取(Extract)、转换(Transform)、装载(Load)的过程,它是构建数 据仓库的重要环节. ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为 企业的决策提供分析依据.

kettle 开发总结

- - CSDN博客推荐文章
2.在用file exists 控件的时候,当用到“文本文件输入”时,文本文件中需要一定的格式,类似下图:. ;当然也可以已经创建了相应的表,然后直接按“确定”按钮就行,如果相应的表和输入的列数及列属性不一样时,也可以在sql按钮的语句中取修改. 在使用file exists时,输入也可以用表输入.

美图离线ETL实践

- - SegmentFault 最新的文章
美图收集的日志需要通过 ETL 程序清洗、规整,并持久化地落地于 HDFS / Hive,便于后续的统一分析处理. ETL 即 Extract-Transform-Load,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程. ETL 一词较常用在数据仓库,但其对象并不限于数据仓库.

AIX环境变量简介及使用

- - CSDN博客推荐文章
环境变量是操作系统环境设置的变量,适用于整个系统的用户进程; 环境变量可以在命令中设置,但是用户注销的时候将会丢失这些设置值; 若要重复适用,则最好在.profile中定义;环境变量的使用与本地变量的使用方法相同, 但是在使用之前,必须用export命令导出. 如果设置了此变量,在cd一个目录的时候,shell会先去查找此变量保存的值; 如果此变量中保存了cd切换的目录,则切换到该目录下.