Kettle – 读取 CSV 文件

Posted on Posted in kettle经验分享

Kettle 是一款采用纯 Java 实现的开源 ETL工 具,属于开源商务智能软件 Pentaho 的一个重要组成部分。项目在 SourceForge 上的地址为:https://sourceforge.net/projects/pentaho/?source=directory。鉴于 SourceForge 在国内不能下载,需要下载请移步到镜像网站。软件本身是免安装的,解压即可用,当然操作系统要安装和配置好 Java 环境。

Kettle PDI (Penhato Data Integration) 支持用拖拉的方式,实现复杂的 ETL 逻辑。本系列计划介绍
Kettle PDI 的主要功能,力求简明易懂。使用的 Kettle PDI 版本是 PDI 7.1,在 Windows 10 下运行。

Penhato Spoon

Penhato PDI 包含不少的工具箱,首先需要了解的是 Spoon,Spoon 是 Kettle 的图形化界面,在 Penhato
的安装目录下可以看到有一个叫 Spoon.bat 的文件(Linux 下是 Spoon.sh),双击这个就可以启动我们的kettle程序。

Kettle 主要的工具有两个:

  • 转换 (Transformation): 负责数据的输入、转换、校验和输出等工作。Kettle 中使用转换(transformation)完成数据 ETL 全部工作。转换由多个步骤 (step) 组成,如文本文件输入,过滤输出行,执行 SQL 脚本等。各个步骤使用 (hop) 来链接。 跳定义了一个数据流通道,即数据由一个步骤流 (跳) 向下一个步骤。在 Kettle 中数据的最小单位是行(row),数据流中流动其实是缓存的行集 (RowSet) 。

  • 作业 (Job),负责定义一个完成整个工作流的控制,比如将转换的结果发送邮件给相关人员。因为转换(transformation)以并行方式执行,所以必须存在一个串行的调度工具来执行转换,这就是 Kettle中的作业。

读取 CSV 文件

假设我们的目的是读取 CSV 文件,在 Excel 中输出。当然,这种简单操作完全不需要 Kettle,Excel 直接就可以打开并转换。练习的目的是从易到难,逐步掌握 Kettle 的用法。

CSV 文件是一种常见的文本文件,一般含有表头和行项目。大多数数据处理型软件都含有对 CSV 格式的支持。进入 Spoon 的主界面,通过菜单 [文件] – [新建] – [转换] 新建一个转换。

在左边的核心对象中,找到输入文件夹下面的CSV文件输入,将其拖到右边的工作区。双击CSV文件输入图标,通过浏览按钮找到 想要读取的 CSV 文件:

点击对话框中的 “获取字段” 按钮,自动获得 CSV 文件各列的表头。之所以可以这样,是因为 “包含列头行” 默认选中。点击 “预览” 按钮可以预览数据。如果是中文,注意文件的编码。

在左边导航区的 “输出” 文件夹下,将 “Excel输出” 步骤拖放到右边的工作区。选中步骤 “CSV文件输入”,通过 shift+鼠标拖动,连接两个步骤,此时界面如下:

双击 “Excel输出”,设置文件名和扩展名:

切换到 “字段” 页签,点击 “获取字段” 按钮,获取需要输出的字段,可以删除不想要的字段,然后点击 “确定” 按钮:

运行之前保存,转换被保存为扩展名为 ktr 的文件,这个文件是 xml 格式的文本文件,可以用 spoon 打开。然后点击 “运行”,即可以将 CSV 文件转换成 Excel 文件。

多个文件输入

在导航区 “核心对象” 中,找到 “输入” 文件夹下 “获取文件名”,拖到工作区。设置如下:

点击 “预览记录” 按钮,查看包含的文件,两个文件都被读取到。filename 是在下一步要使用的文件路径,属于输出的变量。

将 “获取文件名” 步骤连接至 “CSV文件输入” 步骤。此时,“CSV文件输入” 步骤的界面中,文件名字段为数据来源于前一步骤,选择 filename。其他相同。

image.png

运行,可以把两个 CSV 文件中的数据加载并输出到 Excel 文件中。输入的文件格式,比如文本文件、Excel 文件大体类似。