kettle基本使用
一些解释
1.kettle脚本以项目的形式进行组织,再将项目目录托管给git,就可以实现版本控制。
2.kettle两个控件转换(transformation)和工作(job)的区别:
转换是数据流,工作是步骤流,作业的每个步骤必须等前面的步骤都跑完了,后面的步骤才会执行,而转换可以有表输入,表输出等详细步骤,会一次性把所有控件启动(一个控件对应一个线程)然后数据流会从第一个控件开始,一条记录一条记录地流向后面的控件。
3.建议以kettle作为参照物来讨论数据的输入/输出
4.建议一开始就把数据库连接保存到DB连接中,方便后续引用
5.执行逻辑和写代码逻辑相同,要清楚第一步做什么,第二步做什么。执行方式是顺序、选择还是循环?
eg:导出公司数据:
-设置参数
-表输入(sql查询出结果)
-复制记录到结果(把查到的记录存起来)
-循环建表插入数据
-设置变量
-从结果集获取记录(把存起来的记录查出来)
-设置变量(设置成可以引用的变量)
-执行建表sql语句
-插入数据
-表输入(sql查询出结果)
-表输出(将查到的数据插入到新表)
6.为了方便区分任务,kettle文件目录都以输出的表名、全量/增量来组织目录结构。
7.需求为输出为CSV文件,使用UTF-8编码会造成中文乱码。改为GBK解决中文乱码
8.字段获取的时候,要点一下最小宽度。不点的情况下,默认识别数据的宽度不确定(如果数据不够宽度以空格填充)这样会造成文件太大。浪费空间。
9.kettle表切换
要把语句配置成变量,用来适用集群环境。
RENAME TABLE
${database}.a TO ${database}.a_other,
${database}.a_temp TO ${database}.a,
${database}.a_other TO ${database}.a_temp ${is_cluster}
${database}:测试 db_test 正式 db
${is_cluster}: 测试 正式 on cluster cluster_a
10.如果是循环的job,要勾选执行每一个输入行
11.clickhouse读取时间的时候,读出来的就是异常的值。至今无法解决,只能修改原始表字段类型为String按照字符串处理
12.kettle同步任务 mysql到clickhouse 可以insert+select sqlserver到mysql不可以(只有mysql可以远程连接)
怎么做
1.连接资源库 【CTRL+R】,刷新资源库【CTRL+E】
2.文件-新建-作业/转换
3.如果sql中使用变量,替换变量选项一定要勾。