Kettle环境变量在ETL工程上的应用
好久没更新博文,最近临近离职,事情少了,有空停下来总结总结这段时间的东西。 今天先记录下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推荐