从配置单元使用sqoop导出时如何覆盖mysql表

iyr7buue  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(516)

我需要将数据从hive传输到mysql。
这是我的sqoop命令:

jdbc:mysql://mysqlserver --username username --password password --table test --columns "member_id,answer_id,answerer_id" -m 1 --export-dir /user/hive/warehouse/utils.db/test --input-fields-terminated-by \001 --lines-terminated-by \n --update-mode allowinsert

但是,每次运行此命令时,数据似乎都会附加到表中,但不会覆盖表。
那么,当我运行这个sqoop命令时,有没有什么方法可以自动截断mysql表呢?

nr7wwzry

nr7wwzry1#

我认为您要做的是,每次上载数据时都要完全刷新表。通常这是需要在数据库端处理的事情。在执行插入之前,您需要删除所有记录。另一种方法是使用 --staging-table 参数以及 --clear-staging-table 确保每次都能清空table。在这个场景中,--table将包含一个每次都会出现的伪表。你可以有一个触发器来清除该表的数据在设定的时间段每天或当你喜欢。我已经给出了下面的sqoop命令。我把“test”作为暂存表,把“dummy”作为主表。

jdbc:mysql://mysqlserver --username username --password password --table dummy --columns "member_id,answer_id,answerer_id" -m 1 --export-dir /user/hive/warehouse/utils.db/test --input-fields-terminated-by \001 --lines-terminated-by \n --update-mode allowinsert --staging-table test --clear-staging-table

相关问题