Kettle实践

/ Kettle / 没有评论 / 50浏览

Kettle是一个优秀的ETL工具,ETL即数据抽取(Extract)、转换(Transform)、装载(Load)的过程。它是构建数据仓库的重要环节。

简介

Kettle的四大块:

例子

我们可以设计一系列的转换,例如把oracle数据通过sqoop抽取到hive,并计算,最后在导入到其他地方等等。

就像下面这样:

job

一些注意的点

Sqoop版本为1.4.6

SQL

对于SQL脚本一定不要加分号,否则会报错。

Sqoop导入到Hive

把数据从Oracle或MySQL通过Sqoop Shell抽取到Hive时,如果自定义查询,使用--query,此时就不要用--table--columns--where了,并指定--target-dir

而且--query语句中where语句一定要加上AND $CONDITIONS,如果使用双引号,那么$CONDITIONS需要转义,即AND \$CONDITIONS

Sqoop Shell抽取到Hive

脚本如下:

sqoop import --hive-import \
--connect ${MDW_SQOOP_ORACLE_JDBC} \
--username ${MDW_SQOOP_ORACLE_USERNAME} \
--password ${MDW_SQOOP_ORACLE_PASSWORD} \
--verbose \
-m 1 \
--query "SELECT gps.ledger_id, gps.period_name FROM gl_period_statuses gps WHERE gps.application_id = 101 AND gps.closing_status = 'C' AND NOT EXISTS (SELECT NULL FROM cux_gl_close_period_status cps WHERE gps.ledger_id = cps.ledger_id AND gps.period_name = cps.period_name AND cps.equal_flag = 'Y' AND gps.last_update_date = cps.gps_last_update_date) AND \$CONDITIONS" \
--fields-terminated-by '||' \
--target-dir /cmcc/sqoop-tmp/gl_period_statuses \
--delete-target-dir \
--hive-table  ebs.stg_gl_period_statuses_tmp

使用环境变量

全局

此时需要在kettle的属性文件(kettle.properties)中定义,然后通过${NAME}的方式使用。

Windows的目录则在用户目录下:C:\Users\用户\.kettle\kettle.properties

alt

转换

传递到转换

先通过转换的表输入查询一条数据

表输入

设置变量

设置变量

后续的环节通过${NAME}的方式使用。

Sqoop从Hive导出到Oracle

sqoop export \
--connect 'jdbc:oracle:thin:@10.17.15.04:15541:ERPPRD1' \
--username 'APPS' \
--password 'appserpsta' \
--table GL.GL_BALANCES_COMPARE_SAME_TEMP \
--export-dir /apps/hive/warehouse/ebs.db/stg_gl_balances_compare_same_temp \
--columns "LEDGER_ID,PERIOD_NAME" \
--input-fields-terminated-by '||' \
--input-lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
-m 1

其中:

提示:如果不知道hive表存储位置,可以通过show create table table_name;查看。

参考:

调度

Kettle的调度功能太弱,可以通过Azkaban进行作业调度。

如何结合起来?

Kettle使用命令行来运行ktr和kjb

pan运行ktr

cd D:\data-integration
pan /file D:\etltest\EtltestTrans.ktr

把这些内容保存在panKtr.bat里,通过双击panKtr.bat就可以执行ktr文件

kitchen运行kjb

cd D:\data-integration
kitchen /file D:\etltest\jobOK.kjb

保存在kitchenKjb.bat里,双击它,也可以执行kjb文件

参考

Azkaban调度

把脚本写到Azkaban的.job文件中即可,foo.job

# foo.job
type=command
command=kitchen /file jobOK.kjb

最后打成zip包上传。