注意点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1. 过滤记录或者字段选择等组件, 无法出现上面步骤中的字段的时候,尝试在上面步骤中再次点击确定

2. 两个数据流join前必须先进行排序操作。

3. 数据流从计算器或join操作流出,并将流入另一join操作之前,需要插入一个字段选择插件。

4. 表输入插件中,填写查询语句时,语句末尾不能加分号。~~ kettle8.2以上无此问题

5. sql脚本插件中,填写sql语句时,语句末尾必须加分号,否则不会执行。~~ kettle8.2以上无此问题

6. 引用变量时,采用${变量名}的方式引用,以免出现问题。此种引用方式还可以在变量内容后接其他字符串,例如:${key}_20151217会被解析为:value_2015217。

7. job中执行多个trans时,如何确定trans执行的先后顺序?
根据连接线的先后顺序执行,如果需要优先执行则先连接从开始到该trans的连线即可。

8. 如果源数据中有空值,但是目标数据中不希望出现空值:
直接设置目标数据库各列的默认值为空字符串是不行的,因为只有不对某列赋值才会填入默认值,而NULL是有赋值的,只是赋的是NULL。
在表输入中将NULL值替换为空字符串也是不行的,因为Kettle默认在数据流传输过程中会将空字符串转换为NULL进行传输,因此,到了写入目标表时,传入的是NULL值。
因此,正确的解决方案是:
首先,在表输入中将NULL值替换为空字符串;
其次,将kettle的配置文件中配置以下内容:KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y
配置文件位置 xxx/.kettle/kettle.properties
这样,表输入中原来的NULL会被‘’替换,而且在数据流传输中不会变回NULL,插入目标表中即为空字符串。
PS:hive中如何用空字符串替换NULL值?
coalesce函数,返回列表中的第一个非空元素,如果元素都为空则返回NULL,采用coalesce(列名,'')。
9. 进行字段选择时,在弹出窗口的第1、3个标签中尽量填入所有字段,以免出现找不到字段的问题。

10. 如果需要替换$包含的变量,需要将替换sql变量勾上
11. 如果使用?占位符变量,需要将从步骤输入数据勾上,如果是多行,需要勾上执行每一行(可以有多个问好,会按上面的结果依次复制)
12. 如果下一个转换或者作业需要使用当前结果集,必须复制记录到结果(如果后者有命名参数需要使用上一步结果,可以不单独使用组件[从结果获取记录],可以利用作业的[复制上一步结果dao命名参数])
13. 在作业中可以使用检验字段的值来判断走哪一个步骤,但是检验字段的值必须要有一个成功和一个失败
14. 使用循环的话可以利用作业的[执行每一行],如果上一步还有参数结果需要向下传记得[复制上一步结果到命名参数]
15. 如果当前步骤中有需要替换的参数,记得双击空白地方,将命名参数名填上
16. 所有带蓝色小标,里面包含一个$的地方都是可以填写动态参数的
17. 右键组件,点击RUN NEXT ENTRIES...实现并行执行
18. SQL Group By 操作通常比在任何 ETL 环境中进行更有效。因此,PDI Group By/Memory Group By 步骤更适合无法在源进行聚合的任何数据,例如。.csv、txt 等

问题

1
2
3
1. kettle的集群是利用carte来执行的([具体的操作可以查看这里](http://www.kettle.org.cn/1601.html)),它只能以图形化的方式执行,无法命令行(难道每次跑任务还要人为的去操作界面?)
2. 还是集群,无法在作业中执行集群,只能在转换内执行
3. 执行循环操作太费劲了...