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