概述
Insert / update(插入 / 更新)此步驟首先使用一個或多個查詢關鍵字查找表中的一行。如果找不到該行,則插入該行。如果可以找到它,并且要更新的字段相同,則不執行任何操作。如果它們不完全相同,則更新表中的行。
注意:如果有多個匹配關鍵字的行,則只比較找到的第一行。這可能會導致不同的結果,這取決于所找到的行是否與給定值匹配。更新場景是這樣的:如果在多個行具有相同關鍵字的情況下發現差異,則對數據庫觸發一個update語句,該語句使用匹配的關鍵字更新所有行。該注意也適用于更新步驟。
選項

Insert / update(插入 / 更新)步驟有以下選項:
Step name(步驟名稱):在畫布上指定Insert / update(插入 / 更新)步驟的唯一名稱。您可以自定義名稱或將其保留為默認名稱。
Connection(數據庫連接):從下拉列表中選擇已連接數據庫的名稱。或者您可以:單擊“編輯”修改當前的數據庫連接;單擊“新建”以建立新的數據庫連接;單擊Wizard,使用向導打開新的數據庫連接。
Target schema(目標模式):將數據寫入到的表的模式名稱。這對于允許表名稱中包含句點的數據源來說非常重要。
Target table(目標表):要在其中執行插入或更新操作的表的名稱。
Commit size(提交記錄數量):在運行提交之前要更改(插入/更新)的行數。
Don't perform any updates(不執行任何更新):如果啟用,數據庫中的值永遠不會更新,而只執行插入。
- 用來查詢的關機鍵包含如下選項
指定字段值和比較符列表。
Table field(表字段):從填充目標表列的列表中指定要與之比較的字段名。
Comparator(比較符):指定要使用的比較符。注意,根據連接的數據庫和目標表,可以進行區分大小寫的比較。你可以選擇以下其中一個作為比較符:=、<>、、>=、LIKE、BETWEEN、IS NULL、IS NOT NULL。
Stream field 1(流里的字段1):從傳入流中指定字段的名稱,該字段包含要用于與表字段值進行比較的行。
Stream field 2(流里的字段2):指定來自傳入流的字段的名稱,該字段包含您希望用于與流里字段1進行比較的行。
Get fields(獲取字段):選擇此按鈕來填充轉換中前面步驟中的流里字段1和流里字段2。
- 更新字段包含如下選項
允許指定表中要插入/更新的所有字段,包括關鍵字。通過在更新列中指定N,避免對某些字段進行更新。
Table field(表字段):從填充目標表列的列表中指定要執行更新或插入的字段名。
Stream field(流字段):指定來自傳入流的字段的名稱,該字段包含用于更新或插入的值。
Update(更新):對與表字段是否執行更新操作。
示例
示例采用代碼表與用戶表,代碼表里存放用戶性別代碼跟名稱,用戶里面存放用戶跟用戶的性別代碼。為了演示,sql語句很簡化,不可以作為實際業務場景,其表sql語句如下。
/*代碼表*/
DROP TABLE IF EXISTS `code`;
CREATE TABLE `code` (
`code` varchar(10) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `code`(`code`,`name`) values ('1','男');
insert into `code`(`code`,`name`) values ('2','女');
/*用戶表 */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`username` varchar(20) NOT NULL,
`truename` varchar(50) DEFAULT NULL,
`gender_code` varchar(50) DEFAULT NULL,
`gender_name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`username`,`truename`,`gender_code`, `gender_name`) values ('hanmeimei','韓梅梅','2',NULL);
insert into `user`(`username`,`truename`,`gender_code`, `gender_name`) values ('lisi','李四','2',NULL);
insert into `user`(`username`,`truename`,`gender_code`, `gender_name`) values ('zhangsan','張三','1',NULL);
演示效果是用戶表字段gender_code中只存了性別的代碼,而性別名稱的字段gender_name 都為空,現在需要根據字典表更新用戶表中的性別名稱,
1.建立數據庫連接對象
示例采用mysql數據庫作為示例,首先下載mysql驅動https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.47,然后放在在文件夾data-integrationlib下。然后重啟Spoon。如果已經添加過mysql驅動,則可忽略此步驟。
切換至主對象樹,雙擊DB連接。

添加DB連接
然后選項連接類型為mysql,并維護相關的鏈接信息。

維護數據庫連接
連接信息維護完之后,點擊測試,測試連接是否成功。
2.獲取字典表Code數據作為數據輸入源。
添加一個表輸入步驟,數據庫連接上面創建的DB連接名稱demo,然后從獲取SQL查詢語句中選擇表Code,即可。

最后點擊預覽,預覽結果數據。

結果數據
3.添加插入 / 更新輸出步驟,并配置插入 / 更新條件
添加一個輸出中的插入 / 更新步驟。并建立從表輸入到插入 / 更新的一個節點連接。

建立節點連接
在插入 / 更新步驟上配置數據庫連接為上面創建的DB連接名稱demo。目標表選擇user。然后在用來查詢的關鍵字中選擇gender_code;比較符為:= ,然后流里的字段1選擇為:code。更新字段中設置:表字段:gender_name;流字段:name;更新:Y。

設置相關選項內容
最后保存并點擊運行。

查看用戶表數據。
