概述
Table output(表输出)此步骤将数据加载到数据库表中。表输出步骤相当于SQL操作符INSERT,是只需要插入记录时的一种解决方案。如果只想更新行的数据,应该使用更新步骤。要同时执行INSERT和UPDATE命令,请参见插入/更新步骤。
此步骤提供了目标表的配置选项和与性能相关的选项,如提交记录数量和使用批量插入。有一些特定于数据库类型的性能设置可以在数据库连接JDBC属性中设置。有关特定的JDBC性能设置,请参考数据库文档。
注意:如果将一条记录插入到具有标识列的数据库表中,JDBC驱动程序将返回执行插入时使用的自动生成的关键字。这并不是所有数据库类型都支持的。
选项
![5cfb30e1defc5670d74eac8c367b0fd4.png](https://i-blog.csdnimg.cn/blog_migrate/fda3fab2f772d71061a3f6219f0ab8fd.jpeg)
表输出
Table output(表输出)步骤有以下选项:
Step name(步骤名称):在画布上指定Table output(表输出)步骤的唯一名称。您可以自定义名称或将其保留为默认名称。
Connection(数据库连接):通过列表选择要将数据写入其中的现有数据库连接的名称。选择根据你修改的数据库连接。如果您没有现有的连接,请单击新建或Wizard。如果需要修改现有的连接,请单击“编辑”。
Target schema(目标模式):指定数据库模式的名称。
Target table(目标表):指定要写入数据的表的名称。
Commit size(提交记录数量):指定提交批处理的大小。大小是在向数据库发送COMMIT命令之前要执行的INSERT语句的数量。指定提交大小可能会改变性能。并不是所有数据库平台都支持事务。
Truncate table(截断表):在将第一行插入表之前,选择截断表。如果您将在集群上或使用此步骤的多个副本运行转换,则必须在开始转换之前截断表。
Ignore insert errors(忽略插入错误):选择忽略所有插入错误,如违反主键。最多将记录20个警告。此选项不适用于批处理插入。
Specify database fields(指定数据库字段):选择指定数据库字段选项卡中的字段。否则,默认情况下将插入所有字段。必须选择此选项才能使用数据库字段选项卡中的获取字段和输入字段映射工具。
SQL (button)(SQL(按钮)):单击以打开简单的SQL编辑器。编辑器自动生成创建输出表所需的SQL。如果需要,可以修改SQL语句,或者单击执行运行SQL并生成表。SQL编辑器使用目标表字段中指定的名称创建目标表。
- 主选项卡包含如下选项内容
Partition data over tables(表分区数据):选择根据该分区字段中指定的日期字段的值将数据分割到多个表上。选择此选项后,将数据插入其名称遵循模式_的表中。在运行转换之前,必须手动创建这些表,以便将数据插入到这些表中。有关日期格式的详细信息,请参阅每月分区数据/每天分区数据。
Partitioning field(分区字段):指定要用于确定如何跨多个表拆分值的日期字段。此值用于生成将数据插入其中日期的表名。
Partition data per month/ Partition data per day(每个月分区数据/每天分区数据):确定对表进行分区时在表名中使用的日期格式:yyyyMM表示每月分区数据,yyyyMMdd表示每天分区数据。
Use batch update for inserts(使用批量插入):选择使用批处理插入。此选项对INSERT语句进行分组,从而限制对数据库的往返。默认情况下启用此选项。批处理模式仅在满足以下条件时使用:选中“使用批量插入”复选框;提交记录数量选项大于0;返回一个自动产生的关键字选项被清除。转换不能使用唯一连接;数据库类型支持批处理更新。有一些限制因素取决于数据库类型和更多的步骤选项。
Is the name of the table defined in a field?(表名定义在一个字段里?):选择此选项可在包含表名的字段中指定目标表的名称。此选项允许根据包含表名的字段的值,将来自各行的数据存储在不同的表中。例如,如果您将客户数据存储在名为gender的字段中,那么数据可能最终位于Male和Female表中。
Field that contains name of table(包含表名的字段):当选择选项表名定义在一个字段里?时,指定用于表名称的字段名。
Store the table name field(存储表名字段):选择在输出中存储表名。使用此选项时,表必须包含一个列,该列的名称与您在包含表名的字段中定义的名称相同。
Return auto-generated key(返回一个自动产生的关键字):选择返回通过在表中插入一行生成的关键字。
Name of auto-generated key field(自动产生的关键字的字段名称):在包含自动生成的关键字的输出行中指定新字段的名称。
- 数据库字段选项卡包含如下选项
数据库字段允许您指定输入中的哪些字段插入到表中。您可以将字段从输入映射到输出中的列。
Table Field(表字段):要将数据插入其中的数据库列的名称。
Stream Field(流字段):从源/输入步骤读取并插入到数据库中的流字段。
Get fields (button)(获取字段按钮):单击此处将字段从数据源导入到数据库字段表中。要激活此工具,必须在通用区域中指定数据库字段选项。
Enter field mapping (button)(输入字段映射(按钮)):单击以打开输入映射窗口。要激活此工具,必须在通用区域中指定数据库字段选项。
- 输入字段映射窗口包含如下选项
Source fields(源字段):来自传入流的字段名称列表。
Target fields(目标字段):输出表中的字段。
Add (button)(添加(按钮)):单击添加可将选定的字段名称和列名组合移动到映射窗口中。
Delete (button)(删除(按钮)):单击删除将映射组合从映射窗口移回源字段和目标字段窗口。
Mappings(映射):字段到列的映射,指示输入字段和将分配字段的表列。
Auto target selection?(自动选择目标):选择使该步骤执行到目标的映射。
Hide assigned source fields?(隐藏已经匹配的源字段):在匹配并移动到映射窗口时,将字段从源字段窗口中删除。
Auto source selection(自动选择源):在选择列名时,自动从源字段窗口中选择字段。
Hide assigned target fields?(隐藏已经匹配的目标字段):当目标字段窗口已经匹配并移动到映射窗口时,将该字段从目标字段窗口中删除。
Guess (button)(猜一猜(按钮)):单击猜一猜执行所有字段的自动匹配并填充映射窗口。
示例
示例采用两个数据库的用户表,把两个数据库demo和ceshi的用户合并并插入到中心数据库center的用户表中。为了演示,sql语句很简化,不可以作为实际业务场景,其表sql语句如下。
CREATE DATABASE `demo` ;USE `demo`;/*用户表 */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`username` varchar(20) NOT NULL,`password` varchar(50) NOT NULL,PRIMARY KEY (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `user`(`username`,`password`) values ('hanmeimei','123456');insert into `user`(`username`,`password`) values ('lisi','123456');insert into `user`(`username`,`password`) values ('zhangsan','123456');CREATE DATABASE `ceshi` ;USE `ceshi`;/*用户表 */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`username` varchar(20) NOT NULL,`password` varchar(50) NOT NULL,PRIMARY KEY (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `user`(`username`,`password`) values ('wangwu','123456');insert into `user`(`username`,`password`) values ('zhaoliu','123456');insert into `user`(`username`,`password`) values ('wuqi','123456');CREATE DATABASE `center` ;USE `center`;/*用户表 */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`username` varchar(20) NOT NULL,`password` varchar(50) NOT NULL,PRIMARY KEY (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.建立数据库连接对象
示例采用mysql数据库作为示例,首先下载mysql驱动https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.47,然后放在在文件夹data-integrationlib下。然后重启Spoon。如果已经添加过mysql驱动,则可由忽略此步骤。
切换至主对象树,双击DB连接。
![38478307094bea9836dc0c579dc52fc7.png](https://i-blog.csdnimg.cn/blog_migrate/6e71fb07c568412cbb2608fce35a19bf.jpeg)
然后选项连接类型为mysql,并维护相关的链接信息。
![2c5401a458e0204133a5fd0b01e04d5d.png](https://i-blog.csdnimg.cn/blog_migrate/7defaf779a5eb397f096962d6686ad7a.jpeg)
维护数据库连接
连接信息维护完之后,点击测试,测试连接是否成功。
2.获取用户表User数据作为数据输入源。
添加两个表输入步骤,其中一个数据库连接上面创建的DB连接名称demo,第二个数据库连接上面创建的DB连接名称测试,然后从获取SQL查询语句中选择表User,并按username进行排序。
![5b3b69032e3a0472d2b1d14f0f5726ab.png](https://i-blog.csdnimg.cn/blog_migrate/86308f741ea3e9ca79adb0bfd70988d9.jpeg)
最后点击预览,预览结果数据。
![359bb0f747e84817490540c451ac1aea.png](https://i-blog.csdnimg.cn/blog_migrate/cd5e9d8d0e39d290d870792507e8e587.jpeg)
![51d6dc1aafc06edce83a3166c405ac42.png](https://i-blog.csdnimg.cn/blog_migrate/290dd417ae5650383433563fe0a07f38.jpeg)
![1b9a18216e317ffd46cea30451924152.png](https://i-blog.csdnimg.cn/blog_migrate/1a03389494b3de00822109ca19668642.jpeg)
3.添加链接中的合并记录输出步骤,并配置合并记录输出选项
添加一个链接中的数据同步输出。并建立从表输入到合并记录的节点连接。
![bb8fc4a2592891aa5d1c8ab2f2d8855a.png](https://i-blog.csdnimg.cn/blog_migrate/bab266165f7adca83c316a3fe59d0d3b.jpeg)
建立节点链接
在合并记录的步骤上,旧数据源为:表输入;新数据源为:表输入 2;标志字段为:flagfield;匹配的关键字为:username;数据字段为:username、password;
![a1c5d1f674b5ad3dc85a842cc31cf424.png](https://i-blog.csdnimg.cn/blog_migrate/fd5265e4693e733c31c100bd0dd8b003.jpeg)
合并行配置
4.添加输出中的表输出步骤,并配置表输出选项
添加一个输出中的表输出。并建立从合并记录到表输出的节点连接。
![76f8635cd477c1b3bfb36a811c15ba91.png](https://i-blog.csdnimg.cn/blog_migrate/e2ce950258151e312a205edd3489be63.jpeg)
建立节点连接
在表输出进行相关选项的配置。
数据连接为:center;目标表为:user;选中指定数据库字段;
切换至数据库字段选项卡,然后点击获取字段,保留username,password即可。
![aec8dad936c20192a7c83773b2d27fe7.png](https://i-blog.csdnimg.cn/blog_migrate/5fb874a85a6eb67b13ae060584ec9725.jpeg)
选项配置
最后保存并点击运行。
![5c9bdfac1b16934d12f81a52c1da315f.png](https://i-blog.csdnimg.cn/blog_migrate/c02fc77056566b9565a1f8982739cf02.jpeg)
然后查看center库中的用户表数据是否是合并的结果数据。
![2690e2ec7e7c0c892ec6ea26cb138224.png](https://i-blog.csdnimg.cn/blog_migrate/7521d19af77b50da54c7a907a8a136e1.jpeg)
数据合并插入结果