如何更新HDFS文件中的数据,类似于MySQL表中的数据? 我检查了互联网,但所有给出的例子都是 - incremental lastmodified 示例。
在我的情况下,我的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。
[cloudera@localhost ~]$ sqoop import --connect jdbc:mysql://localhost:3306/mydatabase --username root --table employee --as-textfile --target-dir hdfs://localhost.localdomain:8020/user/cloudera/data/employee
按预期导入数据。
[cloudera@localhost ~]$ 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 :(得分:1)
对于新插入的行,您始终可以使用:
--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
会根据merge
列告知sqoop id
新的增量数据。