组件
kettle组件-连接
1:合并记录
该步骤用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按照指定的关键字匹配,比较,合并。 需要设置的参数: 旧数据来源:旧数据来源的步骤。 新数据来源:新数据来源的步骤。 标志字段:设置标志字段的名称,标志字段用于保存比较的结果,比较结果有下列几种: identical:就数据和新数据一样。 changed:数据发生了变化。 new:新数据中有而就数据中没有的记录。 deleted:旧数据中有而新数据中没有的记录。 关键字段:用于定位两个数据源中的同一条记录。 比较字段:对于两个数据源中的同一条记录中,指定需要比较的字段。 合并后的数据将包括旧数据来源和新数据来源中的所有数据,对于变化的数据,使用新数据代替旧数据,同时在结果里用一个标识字段,来指定新旧数据的比较结果。 注: 1:新旧数据需要事先按照关键字排序。 2:就数据和新数据要有相同的字段名称。 例如: 旧数据: field1, field2 1, 1 2, 2 3, 3 4, 4 新数据 field1, field2 1, 1 2, 9 5, 5 设置:标志字段是flag,关键字段是field1,比较字段是field2 合并后的数据 field1; field2; flag 1; 1; identical 2; 9; changed 3; 3; deleted 4; 4; deleted 5; 5; new
2:排序合并
对合并后的记录做排序,指定字段以及排序规则。 一般在排序记录后边一定要跟上一个排序合并。
3:记录关联(笛卡尔输出)
这个步骤允许组合输入流中的所有行(笛卡尔输出) 例: 步骤名称:在单一转换中必须唯一 临时目录:如果想输出更多的行,指定系统存储临时文件的目录名称。 临时文件前缀:生成的临时文件的前缀。 最大缓存大小:系统从临时文件读取数据的缓存大小。 读取的主要步骤:指定读取最多数据的步骤名称。 条件:可以指定复杂的条件限制输出行数。 按照旧ETL工具,需要将基础表A、表B、表C、表D,4张表的数据保存到本地数据库,然后,再通过SQL将4张表的数据关联到一张结果表,过程共产生5张表,严重浪费数据库资源,以及当产生问题,增加维护难度。现使用kettle工具后,将不再需要将基础表A、表B、表C、表D这4张表的数据保留到本地数据库,大大降低数据库的压力。
4:记录集连接
多表的join,可以直接用sql写入"表输入"组件,也可以借助kettle提供的"记录集连接"组件,使用kettle的记录集连接组件,首先必须要两个输入数据集是有序的,并且是根据需要join的字段排序,可以借助kettle的"排序记录"组件。 步骤: 1:首先根据"排序记录"组件将两个数据集需要join的字段进行排序。 2:使用记录集连接组件对数据集进行排序。 注: 1:第一个步骤为连接的主表 2:连接类型分为,内链接,左外连接,右外连接,全外连接。 3:两个步骤的连接字段必须和排序记录中的名称一致。 其他: 1:步骤名称:在单一转换中名称必须唯一。 2:第一个步骤:指定要合并的第一个输入步骤。 3:第二个步骤:指定要合并的第二个输入步骤。 4:连接类型:选择合并可用的类型。 5:连接字段:指定要做关联的字段。
kettle组件-分组
步骤名称:在单一转换中名称唯一。 分组字段:指定分组的字段。 聚合:指定需要聚合的字段,方法以及新字段结果的名称。 包含所有的行:如果选择该项,输出中就包含所有的行,不仅仅是聚合。 临时文件目录:临时文件存储的目录。 临时文件前缀:指定命名临时文件时的文件前缀。 添加行号,每一个分组重启:如果想添加行号,就选择该项。 字段名行号:指定行号将插入的字段名称。 名称:做聚合之后结果数据所对应的字段。 Subject:做聚合操作的字段。 类型:选择聚合函数。 值:定义常量值。
kettle组件-查询
1:数据库查询
数据库连接:所要连接的数据库 模式名称:一般选取用户模式 表名:所要查询的表名 是否使用缓存:指定是否使用数据库缓存查询结果。 缓存大小:指定缓存的大小。 从表中加载所有数据:选中该项,缓存将不被利用。 查询所需的关键字: --表字段:表示所选中的表中的字段。 --比较操作符:对选中字段进行判断。 --字段1/2:流中的其他(表字段中可选的字段在该选项中不能选择)字段。 查询表返回的值: --查询表返回的字段,类型,可以通过新名称对返回字段该名称。 --排序:指定排序方式。
"表输入"和"数据库查询"不同点: 表输入:从数据库表里读取信息。 数据库查询:使用字段值在数据库里查询值。 数据库查询这个组件一般是用在我们已经使用表输入查询到一条或几条记录后再查询其他表数据,在查询到主表的某条记录后自动返回子表中匹配的记录。 使用数据库查询的查询原理是按照左外连接方式进行查询,查询表为驱动表。
"流查询"和"数据库查询"的区别: 流查询步骤只能进行等值查询,数据库查询步骤可以进行非等值查询。 流查询在查询之前把数据加载到内存里,数据库查询可以选择是否把数据加载到内存。 进行等值查询时,数据库查询步骤如果选中了全部缓存,性能接近但仍不如流查询的性能。 进行等值查询时,数据库查询步骤如果没选中全部缓存,性能较低,每次查询都要向数据库发送一个sql请求。 进行非等值查询时,数据库查询即使选中了全部缓存,性能也较低,没有索引在内存中通过循环查询。 数据库查询的缓存适用于多次查询返回同一个查询结果的情况(集中式),多次查询返回不同的查询结果(分散式),使用缓存反而会降低性能。
2:数据库连接
该步骤允许使用先前步骤的数据,运行一个数据库查询。 数据库连接:所要连接的数据库。 sql:查询的sql语句,可以指定查询参数,在sql中使用?代替,查询中?需要用该组件下方的使用的参数中的参数代替,而该网格中的字段以及类型来源于上一个步骤。 返回的行数:0代表所有行,其他数字限制行的输出。 外链接:若选中,则总会返回一个结果,就算查询脚本没有结果。 替换变量:替换查询中的变量。 参数:查询中使用的参数。
kettle组件-流程
1:空操作
该操作什么都不做,主要作用是,想测试的时候充当一个占位符。 例如:两个文本文件输入,同时连接到流查询步骤中,但是流查询仅仅能从一个流中查询信息,所以可以在同时连接流查询之前,将两个文本文件输入连接到空操作,然后再让空操作去连接流查询。空操作组件具有合并记录的作用。
2:过滤记录
该步骤通过条件和比较符来过滤记录。 发送ture数据给步骤:指定条件返回true的数据将发送到此步骤。 发送false数据给步骤:指定条件返回false的数据将发送到此步骤。 true和false步骤必须指定。 条件: 条件中可以字段和字段间进行比较,也可以字段和某一固定的值进行比较。
3:追加流
这个步骤将一个步骤中的数据流追加到另一个步骤中。 前:待追加的数据流。 后:追加到的数据流。
4:阻塞数据直到步骤都完成
kettle中转换和作业的执行顺序---- 1:一个作业内的转换是顺序执行的。 2:一个转换中的步骤是并行执行的。 3:作业内不支持事务,转换内支持事务。 根据业务需要,通常需要在转换内顺序执行,小技巧如下: 1:执行sql是优先于所有步骤的。 2:使用阻塞数据直到步骤都完成,确保其他数据步骤都完成再执行下一步。 事务: 1:设置转换只使用一个事务。转换设置--->杂项--->使用唯一连接; 2:设置转换内的表插入等数据库操作不进行批量提交。"提交记录数量"-->0; 阻塞数据直到步骤都完成: 当抽取10个表数据的时候,我们希望先抽取小表,然后最后再执行大表。但是kettle转换的步骤是并行执行的,这样有可能会出现报错,比如经常报“数据连接异常关闭”等报错,并行执行会消耗大量资源,也会导致抽数的时候抽到一半未成功的情况。这时我们就可以使用kettle的阻塞数据直到步骤都完成 来设计数据表的抽取。当执行完ods_dept步骤的时候,才去执行ods_BONUS步骤,然后再ods_BONUS步骤完成后才去执行ODS_EMP步骤。