2017-08-17 10 views
0

MySQLテーブルのデータと同様にHDFSファイルのデータを更新するにはどうすればよいですか? 私はインターネットをチェックしましたが、与えられたすべての例は- 増分で最後に変更されました例です。Sqoopインクリメンタルインポートとアップデートが機能しない

私の場合、MySQLテーブルには日付またはタイムスタンプの列は含まれていません。 日付の列が含まれていないMySQLテーブルのデータと同様に、HDFSファイルのデータを更新するにはどうすればよいですか?

私は、以下のコマンドを使用してHDFSにインポート

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 | 

以下のように私は、MySQLのテーブルを持っています。

[[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'); 

Iは、新たに挿入された値は--check列、インクリメンタル追記および--last値を使用してHDFSに挿入することができる知っています。

しかし、 'marathi'に更新されたmysqlテーブルの行8と9のhdfsの値を更新するにはどうすればよいですか?また、私の従業員のテーブルには、日付またはタイムスタンプの列が含まれていません。新しく挿入された行の

答えて

0

、いつでも使用することができます。

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

しかしupdated_atの列を持っていないテーブルから更新を取得するために、私は可能厥とは思いません。あなたのテーブルが非常に小さい場合は、おそらく毎回完全なダンプを行います。

最後のインポート以降に更新されたすべてのIDを追跡できる場合は、最後のインポート以降にids 7, 3, 4 and 8が更新されたことがわかっていれば、更新IDの最小値を使用して--last-valueとして使用できます。だからあなたの設定は次のようになります。

--merge-key idid列に基づいて mergeに古いと新しい増分データをsqoopを教えてくれます

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

関連する問題