使用sqoop导入表时出现主键错误

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

我尝试使用sqoop将所有表导入其中一个目录,但其中一个表没有主键。这是我执行的代码。

sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera/retail_db" 
--username=retail_dba 
--password=cloudera 
--warehouse-dir  /user/cloudera/sqoop_import/

我得到以下错误:
导入期间出错:找不到表导出的主键。请使用--split by指定一个,或使用'-m1'执行顺序导入。
通过在rdbms中看到没有主键的sqoop导入
我知道我们可以 --split-by 对于单表导入,有什么方法可以指定吗 --splity-by 为了 Import-all-tables 命令。有没有一种方法可以在没有主键的情况下使用多个Map器进行多表导入。

xzv2uavs

xzv2uavs1#

您需要使用--autoreset来设置一个Map器:
没有主键的表将使用一个Map器导入,而其他具有主键的表将使用默认Map器导入(4-如果未在中指定) sqoop (命令)
正如@jaimecr所说你不能使用 --split-byimport-all-tables 但这只是引用了sqoop指南中的一句话,在您遇到错误的情况下:
如果表没有定义主键 --split-by> <col> 则导入将失败,除非Map器的数目显式设置为具有 --num-mappers 1 或者 --m 1 选项或 --autoreset-to-one-mapper 使用选项。
选择 --autoreset-to-one-mapper 通常与 import-all-tables 用于自动处理架构中没有主键的表的工具。

sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera/retail_db" \
--username=retail_dba \
--password=cloudera \
--autoreset-to-one-mapper \
--warehouse-dir  /user/cloudera/sqoop_import/

相关问题