2017-08-17 40 views
0

如何更新类似于MySQL表中数据的HDFS文件中的数据? 我查了一下互联网,但所给的例子都是用- 增量最后修改的的例子。Sqoop增量导入和更新不起作用

在我的情况下,我的MySQL表不包含日期或时间戳列。 如何更新HDFS文件中的数据,类似于不包含日期列的MySQL表中的数据?

我有MySQL表如下

mysql> select * from employee; 
+----+--------+--------+------+-------+-----------+ 
| id | name | gender | age | state | language | 
+----+--------+--------+------+-------+-----------+ 
| 1 | user1 | m  | 25 | tn | tamil  | 
| 2 | user2 | m  | 41 | ka | tamil  | 
| 3 | user3 | f  | 47 | kl | tamil  | 
| 4 | user4 | f  | 52 | ap | telugu | 
| 5 | user5 | m  | 55 | ap | telugu | 
| 6 | user6 | f  | 43 | tn | tamil  | 
| 7 | user7 | m  | 34 | tn | malayalam | 
| 8 | user8 | f  | 33 | ap | telugu | 
| 9 | user9 | m  | 36 | ap | telugu | 

我使用下面的命令导入到HDFS。

[[email protected] ~]$ sqoop import --connect jdbc:mysql://localhost:3306/mydatabase --username root --table employee --as-textfile --target-dir hdfs://localhost.localdomain:8020/user/cloudera/data/employee 

数据按预期导入。

[[email protected] ~]$ hadoop fs -ls /user/cloudera/data/employee/ 
Found 6 items 
-rw-r--r-- 3 cloudera cloudera   0 2017-08-16 23:57 /user/cloudera/data/employee/_SUCCESS 
drwxr-xr-x - cloudera cloudera   0 2017-08-16 23:56 /user/cloudera/data/employee/_logs 
-rw-r--r-- 3 cloudera cloudera  112 2017-08-16 23:56 /user/cloudera/data/employee/part-m-00000 
-rw-r--r-- 3 cloudera cloudera  118 2017-08-16 23:56 /user/cloudera/data/employee/part-m-00001 
-rw-r--r-- 3 cloudera cloudera  132 2017-08-16 23:56 /user/cloudera/data/employee/part-m-00002 
-rw-r--r-- 3 cloudera cloudera  136 2017-08-16 23:56 /user/cloudera/data/employee/part-m-00003 

现在我更新了mysql表中的值和插入值。但是这个表格不包含日期列。

mysql> update employee set language = 'marathi' where id >= 8; 
mysql> insert into employee (name,gender,age,state,language from people) values('user11','f','25','kl','malayalam'); 

我知道新插入的值可以使用--check-column,incremental append和--last-value插入到hdfs中。

但是,如何更新hdfs中更新为'marathi'的mysql表行8和9的值?另外,我的员工表不包含日期或时间戳列。

回答

0

对于新插入的行,你可以随时使用:

--incremental append --check-column id --last-value 9

但是从没有的updated_at列的表获取更新,我不认为这就是可能的。如果你的桌子很小,那么可能只是每次都做一次完整的转储。

或者,如果你以某种方式可以保持跟踪什么自去年进口的所有ID得到了更新,那么让我们说你知道IDS 7, 3, 4 and 8得到了更新,从去年导入,可以用最小更新的id和--last-value使用。所以,你的配置将是:

-- incremental append --check-column id --last-value 3 --merge-key id

其中--merge-key id会告诉老基于id列sqoop到merge新的增量数据。