我已经在我的本地机器(Linux)中拥有一个MySQL表,并且我有一个与MySQL表具有相同模式的Hive外部表。
我正在尝试将数据从MySQL表导入我的Hive外部表,我正在使用Sqoop。
但问题是,无论何时将新记录添加到MySQL表,它都不会自动更新Hive外部表?
这是我正在使用的Sqoop导入命令:
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root -P --split-by id --columns id,name,age,salary --table customer --target-dir /user/chamith/mysqlhivetest/ --fields-terminated-by "," --hive-import --hive-table test.customers
我错过了什么吗?或者如何做到这一点?
任何帮助都可以得到赞赏。
答案 0 :(得分:3)
在您的情况下,附加到表的新行。 所以你需要使用增量附加方法。
何时使用追加模式?
现在需要在命令中添加
-check-column 指定在确定要导入的行时要检查的列。
- incremental 指定Sqoop如何确定哪些行是新的。
- last-value 指定上一次导入的检查列的最大值
执行此操作的理想之处在于使用sqoop作业,因为在这种情况下,sqoop Metastore会自动记住最后一个值
步骤1:使用正常导入命令初始加载数据。
第2步:
sqoop job --create incrementalImportJob -- import \
--connect jdbc:mysql://localhost:3306/sqoop
--username root
-P
--split-by id
--columns id,name,age,salary
--table customer
--incremental append \
--check-column id \
--last-value 5
--fields-terminated-by ","
--target-dir hdfs://ip:8020/path/to/table/;
希望这会有所帮助..