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

Hive 从配置单元使用sqoop导出时如何覆盖MySQL表,hive,export,sqoop,Hive,Export,Sqoop,我需要将数据从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

我需要将数据从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表?

我想您要做的是,每次上传数据时都要完全刷新表。通常,这是需要在数据库端处理的事情。在执行插入之前,您需要删除所有记录。另一种方法是使用
--staging table
参数以及
--clear staging 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

使用下面的命令删除现有记录并插入新记录(如果有)

sqoop导入--连接jdbc:mysql://mysqlserver --用户名-密码-密码-表测试-列“成员id、答案id、应答者id”-m1-导出目录/user/hive/warehouse/utils.db/test-输入字段以\001结尾-行以\n结尾-更新键-更新模式allowinsert

请注意,上述命令不会应用删除

如果确实要截断数据并再次加载整个数据,请使用以下命令。它仅在源(hdfs)已删除记录时有用

  • sqoop eval--连接jdbc:mysql://mysqlserver --用户名-密码-密码-查询“截断表\u名称”
  • sqoop导出--连接jdbc:mysql://mysqlserver --用户名-密码-密码-导出目录“HDFS\u路径”-表\u名称

  • 我认为,没有直接的方法可以做到这一点。但您仍然可以通过以下方式实现这一点。sqoop eval--connect'connection string'--quey'TRUNCATE TABLE_NAME'sqoop export--connect'connection string'--export dir'HDFS_PATH'--TABLE TABLE_NAME对于您的种类信息,需要为
    --staging TABLE
    手动创建表这似乎很荒谬,Hive有一个覆盖选项。为什么有人不想同步一个表?很难理解这里的确切含义