目录

1、ETL简介

2、Kettle核心概念

3、CSV文件输入

4、csv文件导出excle

5、文本文件输入

6、Excel输入

7、多文件合并

8、Get data from XML

9、JSON input

10、生成大量数据

11、表输入

12、Excel输出

12、文本文件输出(输出txt、csv文件)

12、SQL文件输出

13、表输出

14、更新

15、插入更新

16、删除


1、ETL简介

ETL:Extract-Transform-Load,即数据抽取、转换、装载的过程。

python脚本调用kettle的str python kettle_数据

python脚本调用kettle的str python kettle_数据_02

python脚本调用kettle的str python kettle_数据库_03

2、Kettle核心概念

Kettle可以被归为可视化编程语言,因为Kettle可以使用图形化的方式定义复杂的ETL程序和工作流

Kettle里的图就是转换作业

可视化编程一直是Kettle里的核心概念,它可以让你快速构建复杂的ETL作业减低维护工作量。它通过隐藏很多技术细节,使IT领域更贴近于商务领域。

转化是解决ETL解决方案中最主要的部分,它处理抽取、转换、加载各种对数据行的操作。 转换包含一个或多个步骤,如读取文件、过滤数据行、数据清洗或将数据加载到数据库。

kettle的转换不能定义一个执行顺序,所有的步骤都是以并发方式执行的,当转化启动后,所有步骤同时启动。

如果想要一个任务沿着顺序执行,就要使用作业

3、CSV文件输入

输入:就是用来抽取数据生成数据。是ETL操作的E。

CSV文件:是一种带有固定格式文本文件

4、csv文件导出excle

python脚本调用kettle的str python kettle_mysql_04

(1)文件---->新建---->转化

(2)核心对象

输入---->CSV文件输入

输出---->Excel输出

(3)箭头是通过按住Shift健,鼠标拖动点击。

(4)双击CSV文件输入

python脚本调用kettle的str python kettle_数据_05

获取字段:

python脚本调用kettle的str python kettle_数据_06

(5)双击Excel输出

python脚本调用kettle的str python kettle_数据_07

可以查看字段

python脚本调用kettle的str python kettle_数据库_08

(6)点击运行按钮

python脚本调用kettle的str python kettle_数据库_09

成功

5、文本文件输入

python脚本调用kettle的str python kettle_sql_10

python脚本调用kettle的str python kettle_mysql_11

python脚本调用kettle的str python kettle_数据库_12

python脚本调用kettle的str python kettle_数据库_13

python脚本调用kettle的str python kettle_sql_14

python脚本调用kettle的str python kettle_mysql_15

成功

6、Excel输入

python脚本调用kettle的str python kettle_mysql_16

python脚本调用kettle的str python kettle_sql_17

python脚本调用kettle的str python kettle_mysql_18

7、多文件合并

python脚本调用kettle的str python kettle_数据库_19

python脚本调用kettle的str python kettle_数据_20

8、Get data from XML

XPath-语法

选取节点XPath使用路径表达式在XML文档中选取节点。节点是通过沿着路径或者step来选取的。

下面列出了最有用的路径表达式:

表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取。

//

从匹配选择的当前节点选择文档总的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

python脚本调用kettle的str python kettle_mysql_21

python脚本调用kettle的str python kettle_数据库_22

xml数据

<?xml version="1.0" encoding="UTF-8" ?>
<AllRows testDescription="1 - simple functionality test">
<Rows rowID="1">first row chunk of data
<Row><v1>1.1.1</v1><v2>1.1.2</v2></Row>
<Row><v1>1.2.1</v1><v2>1.2.2</v2></Row>
</Rows>


<Rows rowID="2">second row chunk of data
<Row><v1>2.1.1</v1><v2>2.1.2</v2></Row>
<Row><v1>2.2.1</v1><v2>2.2.2</v2></Row>
</Rows>

<Rows rowID="3">third row chunk of data
<Row><v1>3.1.1</v1><v2>3.1.2</v2></Row>
<Row><v1>3.2.1</v1><v2>3.2.2</v2></Row>

</Rows>
</AllRows>

python脚本调用kettle的str python kettle_数据_23

python脚本调用kettle的str python kettle_数据库_24

9、JSON input

python脚本调用kettle的str python kettle_mysql_25

{
    "store":{
        "books":[
        	{
            	"a":"a1",
            	"b":"b1",
            	"c":"c1",
            	"d":"d1"
        	},
        	{
            	"a":"a2",
            	"b":"b2",
            	"c":"c2",
            	"d":"d2"
        	},
        	{
            	"a":"a3",
            	"b":"b3",
            	"c":"c3",
            	"d":"d3"
        	}  
    	],
    	"pencil":{
        	"color":"red",
        	"price":11.11
    	}
	},
    "experence":10
}

JsonPath表达式

结果

$.store.books[*].b

["b1","b2","b3","b4"]

$..b

["b1","b2","b3","b4"]

$.store..d

["d1","d2","d3","d4"]

{
    "status":"ok",
    "response":{
        "submissions":[
            {
                "id":"1",
                "books":[
        		{
            		"a":"a1",
            		"b":"b1",
            		"c":"c1",
            		"d":"d1"
        		},
        		{
            		"a":"a2",
            		"b":"b2",
            		"c":"c2",
            		"d":"d2"
        		}
    			]  
            },
            {
                "id":"2",
                "books":[
        		{
            		"a":"a3",
            		"b":"b3",
            		"c":"c3",
            		"d":"d3"
        		},
        		{
            		"a":"a4",
            		"b":"b4",
            		"c":"c4",
            		"d":"d4"
        		}
    			]  
            }
        ]
    }
}

python脚本调用kettle的str python kettle_sql_26

python脚本调用kettle的str python kettle_数据_27

python脚本调用kettle的str python kettle_数据库_28

JSON input 2

python脚本调用kettle的str python kettle_数据库_29

python脚本调用kettle的str python kettle_数据_30

通过excel输出,excel输出那字段可以进行选择,选择需要的字段。

python脚本调用kettle的str python kettle_sql_31

10、生成大量数据

可以用于生成大批量测试数据

python脚本调用kettle的str python kettle_数据_32

此处1000指的是生成的数据数量。

python脚本调用kettle的str python kettle_数据库_33

python脚本调用kettle的str python kettle_数据库_34

如图产生大量的数量。

11、表输入

从数据库中导数据到表

python脚本调用kettle的str python kettle_数据_35

python脚本调用kettle的str python kettle_mysql_36

spoon连接本地mysql中会出现很多问题。

问题、mysql驱动版本不匹配:确定本地mysql的版本号,与spoon-lib中的mysql驱动版本(正确,但依旧报错缺query_cache_size)

python脚本调用kettle的str python kettle_sql_37

解决:在mysql的my.ini文件下加入query_cache_size=0配置(但是不可以。。。继续报错)

最终解决:参照网址kettle连接mysql8.0以上版本_梦幻安然-CSDN博客_kettle连接mysql8.0

(1)首先下载对应mysql版本的驱动(我的版本:mysql 的版本8.0.21,spoon的版本9.0.0.0-423),即最好有确定spoon 的lib中有mysql8.0.21版本的驱动。

(2)将下载好的mysql的驱动放到kettle安装文件中的lib下面,然后重启Spoon

(3)连接方式

        方式一: 数据库类型选择Generic Database

python脚本调用kettle的str python kettle_sql_38

自定义连接URL填入:jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL(注:sys是你的数据库名称)
        自定义驱动类名称填入:com.mysql.cj.jdbc.Driver

python脚本调用kettle的str python kettle_mysql_39

方式二:在kettle的安装目录下data-integration\simple-jndi\jdbc.properties加入jdbc的连接信息

MYSQL8_DB/type=javax.sql.DataSource

MYSQL8_DB/driver=com.mysql.cj.jdbc.Driver

MYSQL8_DB/url=jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT //(注:sys是你的数据库名称)

MYSQL8_DB/user=root //(用户名)

MYSQL8_DB/password=root //(密码)

python脚本调用kettle的str python kettle_数据_40

选择mysql连接,连接方式选择JNDI,JNDI名称填写MYSQL8_DB

python脚本调用kettle的str python kettle_数据_41

点击测试之后:

python脚本调用kettle的str python kettle_数据_42

写入SQL语句,预览信息

python脚本调用kettle的str python kettle_sql_43

12、Excel输出

07版的excel输出

python脚本调用kettle的str python kettle_数据库_44

在连接第二个箭头是会出现分发和复制,选择复制即可。

此处数据量较大时,进行勾选。

python脚本调用kettle的str python kettle_sql_45

12、文本文件输出(输出txt、csv文件)

小技巧:在此处可以把mysql设为公共数据源,各个转换都可以使用。

python脚本调用kettle的str python kettle_数据库_46

python脚本调用kettle的str python kettle_sql_47

python脚本调用kettle的str python kettle_mysql_48

输出文件

python脚本调用kettle的str python kettle_数据_49

12、SQL文件输出

获取数据库中的表,以.sql文件方式输出sql语句

python脚本调用kettle的str python kettle_mysql_50

python脚本调用kettle的str python kettle_数据库_51

13、表输出

案例:从excel中读取id,name,age字段的数据写入数据库ssmbuild的book1表中。

python脚本调用kettle的str python kettle_mysql_52

excel输入按照原先的方式;(注意:不要忘记增加)

python脚本调用kettle的str python kettle_mysql_53

表输出:在数据库连接方式那可以进行选择,选择共享的数据库。注意此处sql可能报错,我这在varchar里加分配varchar(10)

python脚本调用kettle的str python kettle_数据_54

需要修改的部分。

python脚本调用kettle的str python kettle_mysql_55

成功在数据库中创建表。

14、更新

更新:就是把数据库已经存在的记录数据流里面的记录进行比对,如果不同就进行更新。(注意:如果记录不存在会出现错误)

案例:从Excel读取数据,并把数据更新到book1表中。

python脚本调用kettle的str python kettle_数据库_56

Excel数据就是正常选择配置,更新操作如下:

python脚本调用kettle的str python kettle_数据库_57

未勾选时会造成错误

python脚本调用kettle的str python kettle_数据库_58

成功:更新表中id存在的数据,表中不存在的不进行增加。

15、插入更新

插入更新:把数据库已存在的记录与数据流里面的记录进行对比,如果不同进行更新。如果记录不存在,则插入数据

python脚本调用kettle的str python kettle_sql_59

Excel输入按照正常配置,插入/更新操作与更新操作类似,按下图进行配置。

python脚本调用kettle的str python kettle_mysql_60

16、删除

删除就是删除数据库表中指定条件的数据。

案例:删除book1中id为1的数据。

python脚本调用kettle的str python kettle_数据_61

自定义常量数据:

python脚本调用kettle的str python kettle_mysql_62

python脚本调用kettle的str python kettle_sql_63

删除

python脚本调用kettle的str python kettle_数据_64