[Author]: kwu
解决sqoop导入关系库更新联合主键的问题,把数据从hive中导入关系库,如果关系库表有联合主键的情况,且需要把新导入的数据更新原来的数据。
以下提供参考的示例:
1、创建关系库表
- CREATE TABLE
- test123
- (
- id INT NOT NULL,
- name VARCHAR(25) NOT NULL,
- age INT,
- PRIMARY KEY (id, name)
- )
- ENGINE=MyISAM DEFAULT CHARSET=utf8
2、创建hive表
- drop table default.test123;
- create table default.test123
- (
- id int,
- name string,
- age int
- )
- ROW FORMAT DELIMITED fields terminated by '\t'
- STORED AS TEXTFILE;
导入测试数据:
- insert overwrite table default.test123 select 1,'bill',5 from default.kwu_test limit 1;
3、sqoop导入mysql数据库
- sqoop export --connect jdbc:mysql://10.130.2.245:3306/test --update-key "id,name" --update-mode allowinsert --username kwu --password '123456' --table test123 --fields-terminated-by '\t' --columns "id,name,age" --export-dir /hive/warehouse/test123
说明:
1) -update-key 指定联合主键的值
2) --update-mode allowinsert 指定更新的模式为可插入,默认为 updateonly
修改测试数据:
- insert overwrite table default.test123 select 1,'bill',6 from default.kwu_test limit 1;
查看mysql数据库中age已经修改为6.