导入表时的主键错误使用Sqoop

Pri*_*jan 2 import primary-key sqoop

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

sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera/retail_db" 
--username=retail_dba 
--password=cloudera 
--warehouse-dir  /user/cloudera/sqoop_import/
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

导入期间出错:找不到表departments_export的主键.请使用--split-by指定一个或使用'-m 1'执行顺序导入.

通过在RDBMS中查看 没有主键的sqoop导入

我明白了,我们可以只使用--split-by单个表import.Is有什么办法可以指定--splity-byImport-all-tables命令.有没有办法可以使用多个映射器进行多表导入而不使用主键.

Ron*_*tel 8

你需要使用--autoreset-to-one-mapper:

没有主键的表将使用一个映射器导入,而其他表使用带有默认映射器的主键导入(4 - 如果未在sqoop命令中指定)

  • 正如@JaimeCr所说,你不能使用--split-by,import-all-tables但这只是来自sqoop指南的错误,你得到的错误:

    如果表没有定义主键--split-by> <col>且未提供主键,则导入将失败,除非使用--num-mappers 1or --m 1选项或使用--autoreset-to-one-mapper选项将映射器的数量显式设置为1 .

  • 该选项--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/
    
    Run Code Online (Sandbox Code Playgroud)