欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ETL之kettle使用总结:(批量、含常量)csv入库

程序员文章站 2024-03-22 13:08:34
...

本文实验的ktr文件:ktr文件


1.概述

18年开工第一天,做下Kettle的使用总结。
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。
关于kettle的下载及安装这里不赘述,此处仅介绍工作过程中最常见的三种使用场景:

  • 单个csv文件入库;
  • 增加一个常量字段的csv文件入库;
  • 批量csv文件入库。

2.具体操作

2.1单个csv文件入库

这个是最简单的操作,下面我们通过实例进行说明:

2.1.1首先我们在数据库中建立需要入库的表ljb_test_kettle

create table ljb_test_kettle
(
    session_id      varchar2(50),
    line_num        varchar(4),
    extension_id    varchar2(10),
    similar_grade   number
);

这里一定要注意字段的类型,多数情况下的报错都是由字段类型不匹配或长度不够等引起的。

2.1.2打开spoon

双击kettle解压文件中的spoon.bat(windows是spoon.bat,Linux和Mac是spoon.sh)。
在主对象树右击转换->新建,建立新的转换。并保存Ctrl+S,命名,这里随便写个。如下图:
ETL之kettle使用总结:(批量、含常量)csv入库
ETL之kettle使用总结:(批量、含常量)csv入库

2.1.3 创建数据库连接DB连接

右键图中DB连接-新建连接,填上相应的参数,除了数据表空间和索引表空间之外,其余均要填写。如下图:
ETL之kettle使用总结:(批量、含常量)csv入库
填写完成,我们可以点击测试,如果没问题则表示成功,如果错误请根据具体信息解决(网络问题、jar包缺少、配置错误等)。

2.1.4 创建输入输出对象

点击核心对象树,分别找到输入-CSV文件输入输出-表输出,并直接拖动到转换的图形视图(下图中的2视图)中。
ETL之kettle使用总结:(批量、含常量)csv入库

2.1.5创建连接

按住Shift键,依次单击输入对象和输出对象,会在两者之间生成一个箭头,并选择主输出步骤。如下:
ETL之kettle使用总结:(批量、含常量)csv入库

2.1.6 输入输出对象参数设置

通过双击两个对象,可以进行相关参数设置。

2.1.6.1 输入对象参数配置

步骤名称:可以使用默认,建议根据工作要求进行规范命名。
文件名:通过浏览选择对应需要导入的文件。
列分隔符:因为是CSV文件,所以采用默认的英文逗号。

对于字段这一列,我们可以自动获取字段,操作方式:
获取字段-取消,注意弹出框的时候一定选取消,不然相应的格式之类的会自动帮你填写,但这些往往我们并不需要。如下图:
ETL之kettle使用总结:(批量、含常量)csv入库
我们可以通过预览查看是否是我们想要的结果。
ETL之kettle使用总结:(批量、含常量)csv入库

2.1.6.2 输出对象参数配置

步骤名称:可以采用默认,推荐采用结果表名称。
数据库连接:采用之前创建的连接,如果没有创建,可在这里点击新建按钮进行创建。
目标表:数据库中的表名。
勾选指定数据库字段
ETL之kettle使用总结:(批量、含常量)csv入库

如果我们不勾选该选项的话,在我们选择数据库字段的时候,如下两个按钮就是灰色的,无法点击,如下图:
ETL之kettle使用总结:(批量、含常量)csv入库

点击获取字段。然后观察顺序是否无误,确定。

2.1.7 运行转换

点击三角符号,运行这个转换。
并查看日志。
ETL之kettle使用总结:(批量、含常量)csv入库

去数据库中查看数据,至此已完成。

2.2 增加新的常量字段的csv文件入库

我们有如下需求,三个csv文件入库,并添加一个flag字段,对于第一个csv文件,flag为0,第二个flag为1,第三个flag为2。

我们可以通过添加自定义常量的方式实现。
我们把刚才的对象复制一份,并点击连接箭头,可以看到,会变成灰色,这样,当我们运行的时候,灰色的转换就会被跳过。

2.2.1 增加常量

转换-增加常量
ETL之kettle使用总结:(批量、含常量)csv入库
建立如下图的转换。
ETL之kettle使用总结:(批量、含常量)csv入库

同样的我们建立测试表:

create table ljb_test_kettle_final
(
    session_id      varchar2(50),
    line_num        varchar(4),
    extension_id    varchar2(10),
    similar_grade   number,
    flag            number
);

2.2.2 配置常量

双加增加常量,并进行下图所示配置。
ETL之kettle使用总结:(批量、含常量)csv入库

2.2.3 配置输出对象

双击输出对象,更新配置,重新获取字段:
ETL之kettle使用总结:(批量、含常量)csv入库

2.2.1 运行转换

运行转换,第二个第三个同理,只需要更改对象的flag值即可。
ETL之kettle使用总结:(批量、含常量)csv入库

2.3 批量入库csv文件

有如下需求,我们需要把下图中的所有csv文件入库,这些csv文件字段类型完全一样。
ETL之kettle使用总结:(批量、含常量)csv入库

这时,我们需要采用通配符进行批量入库。

2.3.1 首先把之前的转换全部点击为灰色。

2.3.2 修改输入对象

批量输入与单个输入不同点在于输入对象变为了文本文件输入。

输入-文本文件输入
如下图:
ETL之kettle使用总结:(批量、含常量)csv入库

2.3.3 配置输入对象

2.3.3.1 配置文件项

浏览到目录,然后增加。
ETL之kettle使用总结:(批量、含常量)csv入库

填写通配符:采用如下写法可以成功。

.*\.csv$

如下图:
ETL之kettle使用总结:(批量、含常量)csv入库

2.3.3.2 配置内容项

分隔符,英文逗号。
格式:Unix。
ETL之kettle使用总结:(批量、含常量)csv入库

2.3.3.3 配置字段项

获取字段-取消
ETL之kettle使用总结:(批量、含常量)csv入库

2.3.3.4 预览记录

预览记录没问题则表示配置成功。

2.3.4 运行转换

运行该转换即可。