兩個不同的資料庫中有兩個相同的表,如何合併到一起?
資料庫示例如下 :name是關鍵欄位
資料庫A 表 t1name valuea 1
b 2資料庫B 表 t1name valuea 3
c 4現在想把資料庫B的表t1合併到資料庫A的表t1中,如果 name欄位相同則把value值相加後保存,否則就將記錄直接插入到資料庫A中,比如上面的示例,操作完成後應該如下
name valuea 4b 2
c 4sql語句應該如何寫。。。。求高手幫助給出完整寫法,非常感謝!
刪掉一個
# 創建資料庫
create database db_a;
create database db_b;
# 創建表
create table db_a.t1
(
name varchar(255) null,
value varchar(255) null
);
create table db_b.t1
(
name varchar(255) null,
value varchar(255) null
);
# 插入數據
insert into db_a.t1 values("a","1"),("b","2");
insert into db_b.t1 values("a","3"),("c","4");
# 根據你的需求查詢數據
# 首先把兩個庫的t1表查出來,然後通過union all拼成一張新的表
# 然後直接按name做group, 把value值加一起就好了
select name,sum(value) from (select * from db_a.t1 union all select * from db_b.t1) as t group by name;
查出來數據以後,插入新的臨時表,把原來的db_a.t1表改名,把臨時把改成t1就好了
這個不算複雜需求吧,我知道oracle至少有兩個方案,1,使用merger語句,2,使用存儲過程
方法有很多
- 將資料庫A中的表t1教小,則將t1導出成csv文件,然後導入資料庫B中;如果t2較小則導出t2
2. 大數據資料庫都提供database federation的組件,例如postgresql的fdw等,可以直接在兩個庫之間進行查詢
3. 使用ETL工具
異構資料庫的join或merge操作,可以使用etl工具或者其思想來實現。
所謂ETL,E抽取(Extract,同源或者不同源數據),T轉換(Transform,數據流特定業務邏輯處理),T載入(Load,做好數據流合併,數據流轉換後,寫入目標庫)
具體的工具或者說引擎,離線或者準實時清洗如:datastage,kettle,informatic等,實時數據流join如:flink、spark等
上面的思想都是異構數據源直接合併數據流的思想。
也可以,先把異構數據源,抽取到同構數據源,再做內部sql join也是一種思路。
使用attach然後讀表1插入到表2
推薦閱讀: