Kettle — 常用组件使用

前言

Kettle控件分为三种:转换控件、作业控件和Hop(跳)。

转换控件

输入控件

表输入

表输入控件是从数据库的表中读取数据的控件。我们可以在表中输入SQL语句(或者通过获取SQL查询语句获取)。比如我们通过获取SQL查询语句获取到SQL语句,我们可以预览这个转换。

预览结果如下所示:

对于查询语句而言,肯定是需要进行筛选的,这样就需要进行变量的引用。在Kettle中只要有替换SQL语句里的变量这个选项,就说明是支持变量的引用。还有就是允许简易转换的选项:勾选后可以避免不必要的字段的数据类型转换,从而提高性能。

使用方式如下所示(对变量使用${var}):

然后双击空白处,对转换属性—参数名称进行设置。

预览结果

或者直接用Job其他控件输入该属性值,比如下面的设置变量控件。

下面是Java类型与Kettle类型对应:

  case ValueMetaInterface.TYPE_STRING: // Kettle类型
    parameterType = String.class; // Java类型
    break;
  case ValueMetaInterface.TYPE_NUMBER:
    parameterType = Double.class;
    break;
  case ValueMetaInterface.TYPE_INTEGER:
    parameterType = Long.class;
    break;
  case ValueMetaInterface.TYPE_DATE:
    parameterType = Date.class;
    break;
  case ValueMetaInterface.TYPE_BIGNUMBER:
    parameterType = BigDecimal.class;
    break;
  case ValueMetaInterface.TYPE_BOOLEAN:
    parameterType = Boolean.class;
    break;
  case ValueMetaInterface.TYPE_BINARY:
    parameterType = byte[].class;
    break;
  default:
    parameterType = String.class;
    break;

自定义常量数据

自定义常量数据可以允许自定义表和数据,通常用于测试或者固定数据的输入(这里输入还有一个生成记录控件,但是该记录生成的记录每条都是相等的)。对于自定义常量数据控件我们可以设置列名和自定义每一行的数据,下面就是设置列名(元数据)和行(数据)。

获取系统信息

通过获取系统信息控件,我们可以获取系统的时间、转换或者作业的开始结束时间(用于增量)、主机信息、上一个作业完成情况和命令行参数等。通过类型的选择可以选择多种类型,这里我们选择命令行参数。

下面是完整的样例。

表输入配置如下所示(要选择获取系统信息):

最后添加的文本输出是为了验证结果。转换的参数配置后,启动时还需要输入值,不然表输入就拿不到值。

文本文件输入

文本文件输入是一个比较复杂的处理过程,它可以从多种格式的文件中读取数据,功能非常的强大。下面是一个简单的使用,我们需要浏览选择一个文件,然后将这个文件增加到选中的文件中。

在内容中设置分隔符。

然后在字段页签获取字段,然后预览一下是否成功。

下面具体介绍一下文本文件输入的各个选项。

首先从文本来源上来说,获取文件的方式有两种:直接选择本地文件(刚刚的选择方式)和从上个步骤获取文件名。

这里说明一下从上个步骤获取文件名,如下所示。要先使用一个获取文件名的控件,获取文件名。

然后在文本文件输入中配置从上个步骤获取文件名。记住要配置在输入里的字段被当作文件名为filename,不然会报错的。

下面说一下文本文件输入中的内容设置选项。

1)分隔符和文本限定符:分隔符是对文本字段进行分割;而内容限定符是当文本字段中有分隔符作为字段内容一部分的时候,就需要文本限定符将该字段内容包裹起来,如下所示。

2)逃逸字符:类似于编程中的转义字符"\",比如\n就代表回车、\r就是tab键。利用逃逸字符我们可以自己设定转义字符,这里我就按照Java中将"\"设置为逃逸字符。

同时文本输入是有过滤的功能的,如下所示,我们可以设置过滤的字符串。

结果如下所示。这个工具有些东西看的有些耐人寻味,比如积极匹配选择是,就会出现只有被过滤的数据。

其他输出字段,在这里可以选择于文件相关的字段输出。

CSV文件输入

CSV文件输入的读取要比文本文件输入要简单。但是因为利用了NIO、并行和延迟转换,效率大大的提高。如下所示(CSV不仅仅可以读取CSV文件还可以读取其他文件):

固定宽度文件输入

这种输入方式的行宽度是一定的,字段的宽度也是一定的,不需要分隔符解析,性能比较好,但是非常的不灵活。使用方式如下所示,主要是要设置行宽度和每一个字段的宽度。

XML文件输入(Get data from XML)

XML文件输入能从XML读取每一个元素作为字段。下面是是从本地XML文件输入,这里选择了三个文件。

在内容中,主要是要设置循环读取路径(从XML哪个层次结构开始读取)。还有几个属性也是需要知道的,比如:

         考虑命名空间:选中此项即可识别XML文档名称空间

         验证XML:在解析之前会验证XML格式

         使用标记(user token):参考https://www.cnblogs.com/wind-man/p/7898145.html

         用于截取数据的XML路径(大文件):与大文件的处理相关

最后说一下附件字段:一个是内容是获取文件;还有一个是行号。

在字段中只要获取字段,然后选择自己输出的字段即可。最后的其他字段和之前将的都是相同的。

在上面只说了从本地的目录或者文件中获取XML文件,下面说一下如何从上一个步骤中获取XML文件。这里我先通过自定义常量数据控件,定义了三个文件的路径。

下面是需要勾选XML源是文件名这个选项。因为如果不勾选,就会将XML源字段名中的数据当做XML的源数据,而不是文件名。

JSON文件输入

JSON文件输入的使用方式与XML文件输入类似,主要是对JSON格式的数据源进行解析。下面的事例是从一个URL中获取JSON数据,然后传递给JSON文件输入进行解析。

字段配置中路径要按照Json Path规则进行编写

自定义常量数据Path数据。

其他输入控件,比如SAP Input、XML输入流、Cube文件输入、Excel输入、LDAP输入、Yaml输入、邮件信息输入、生成随机数、获取子目录名、取资源库配置、配置文件输入、获取文件行数等,等以后用到了再添加。

输出控件

文本文件输出

  1. 启动Carte

Excel输出

将输出的记录以一定格式保留到Excel中。Excel输出的具体使用方式如下所示:

先输入文件名,然后下面有很多选项,来共同组成一个文件的文件名,选择自己需要的即可。最后获取一下字段。

执行一下查看结果

Excel输出有两个版本,一个是上面的普通版本支持(65536的行数限制),一个是07年以后版本的支持

表输出

表输出还是比较复杂的控件,通过对表输出控件使用方式的讲解,应该会对输出控件使用规律有一定的了解,下面的是表输出控件的配置界面。

上面我们可以看到头部最重要的配置就是数据库连接、目标表和指定数据库字段。在目标表中,我们可以选择一个表,然后通过DDL—使用当前连接生成一个新的表。

指定数据库字段选项是让我们可以选择插入的字段。

输入字段映射字段映射,使用猜一猜功能(如果映射有问题,手动再改一下)。这里有一个区别点获取字段在后面的流程中没有获取的字段就不会显示,如果是字段映射则仍然存在。

这样一个简单的表输出就能使用了。还有这里要说明一点的是如果在主选项中选择了使用批量插入,那么忽略插入错误就不能使用;裁剪表的意思就是等于truncate table(清空表)。

在主选项中选择返回一个自动产生的关键字选项,可以返回插入的数据的主键值,这样在下面的步骤讲不定就可以使用到了。

选择表分区数据,可以进行数据库表的分区(分区表需要自己提前创建,例如async_user_201808、async_user_201809)。还有一个是要选择分区的字段,该字段需要是Date或者TimeStamp类型。Kettle表输出只能以时间分区(月/日)。

删除

删除其实就是数据库操作的DELETE操作。只要配置数据库、表和删除的条件即可。

插入/更新

该控件一般不推荐使用效率太低,直接使用表输出和更新替代(更新的使用也更简单,这里就不提了)。插入/更新操作也很简单,主要将一下关键字的匹配,如果找到匹配的值,就更新值;不存在就插入新值。

数据同步

MySql批量加载

SQL文件输出

根据选中的数据库类型,生成相应的 SQL 脚本(DDL和DML)。使用也很简单,如下所示:

生成的SQL语句如下所示。

XML输出

XML输出和普通输出几乎差不多,这里主要说一下内容父XML元素和记录XML元素。

如果元素名称不填,文件名称等于元素名称。

输入后的结果如下所示。

Hop的使用

在Kettle中控件之间的连线叫做Hop(跳)。

转换中Hop的状态

在转换中,一般情况,控件和控件之间只有一个Hop,当然,如果需要的话,我们拖了2个控件出来,像这样:

 分发记录

目标步骤轮流接收记录,其实就是你一条,我一条,轮着接收数据。

我们执行下,看看这个结果试试,我们在步骤度量中可以看到a.txt和b.txt分别写入的数量:

看看结果文件,就是这样的

复制记录

所有记录同时发送到所有的目标步骤。比如上面的例子,2个文本文件会接收到同样的所有的数据。

结果文件的话,就是2个节点,接收到的数据都是一样的。

作业中Hop的状态

在作业中,Hop主要用来控制流程。

有3种状态,一个锁,一个绿色的对号,一个红色的叉号

简单来说,

:表示无论上一步执行成功还是失败,都一定会执行下一步

:表示上一步执行成功才会执行下一步

:表示上一步执行失败执行下一步

比如我们上面的例子,我们的转换执行成功后就结束了;如果转换执行失败了,我们就发送邮件。

===============================================================================

| Kettle中文社区:http://www.ukettle.org

| Kettle中文网:http://www.kettle.net.cn/

| Kettle源码地址:https://github.com/pentaho/pentaho-kettle

| Kettle 官方帮助文档:https://help.pentaho.com/Documentation/8.1

===============================================================================

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章