我尝试使用sqoop将所有表导入其中一个目录。但其中一个表没有主键。这是我执行的代码。
sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera/retail_db"
--username=retail_dba
--password=cloudera
--warehouse-dir /user/cloudera/sqoop_import/
我收到以下错误:
导入期间出错:找不到表的主键 departments_export。请用--split-by指定一个或执行一个 使用' -m 1'顺序导入。
通过观察 sqoop import without primary key in RDBMS
我知道我们可以使用--split-by
进行单个表导入。有一种方法可以为--splity-by
命令指定Import-all-tables
。有没有办法可以使用多个映射器进行多表导入而不使用主键。
答案 0 :(得分:8)
您需要使用--autoreset-to-one-mapper:
没有主键的表将使用一个映射器导入,其他表使用主键和默认映射器导入(4 - 如果未在sqoop
命令中指定)
正如@JaimeCr所说,您不能将--split-by
与import-all-tables
一起使用,但这只是来自sqoop指南的错误提示:
如果表没有定义主键并且未提供
--split-by> <col>
,则导入将失败,除非将映射器的数量明确设置为--num-mappers 1
或{{1}选项或使用--m 1
选项。
选项--autoreset-to-one-mapper
通常与--autoreset-to-one-mapper
工具一起使用,以自动处理模式中没有主键的表。
import-all-tables