在RDBMS中没有主键的Sqoop导入

时间:2015-03-19 06:34:01

标签: import sqoop

我可以使用sqoop将RDBMS表数据(表没有主键)导入配置单元吗?如果是,那么请你给出sqoop import命令。

我尝试过sqoop import general命令,但失败了。

5 个答案:

答案 0 :(得分:18)

如果您的表没有定义主键,那么您必须提供-m 1选项来导入数据,或者您必须提供带有某个列名的--split-by参数,否则会出错:

ERROR tool.ImportTool: Error during import: No primary key could be found for table <table_name>. Please specify one with --split-by or perform a sequential import with '-m 1'

然后你的sqoop命令看起来像

sqoop import \
    --connect jdbc:mysql://localhost/test_db \
    --username root \
    --password **** \
    --table user \
    --target-dir /user/root/user_data \
    --columns "first_name, last_name, created_date"
    -m 1

sqoop import \
    --connect jdbc:mysql://localhost/test_db \
    --username root \
    --password **** \
    --table user \
    --target-dir /user/root/user_data \
    --columns "first_name, last_name, created_date"
    --split-by created_date

答案 1 :(得分:3)

您可以在没有Primarykey的情况下将数据从RDBMS导入配置单元。

首先,您需要在hive中创建一个表。之后,您需要编写以下代码:

sqoop import \
    --connect jdbc:mysql://localhost/test_db \
    --username root \
    --password **** \
    --table <RDBMS-Table-name> \
    --target-dir /user/root/user_data \
    --hive-import \ 
    --hive-table <hive-table-name> \
    --create-hive-table \
    -m 1 (or) --split-by <RDBMS-Column>

答案 2 :(得分:2)

在使用1 Mapper的第一个场景中...如果文件的大小非常大,则此过程将花费更多时间来响应或可能失败。在使用mapper = 1之前检查数据的大小。

答案 3 :(得分:1)

快速查看:

Sqoop作业失败,错误如下所示:“导入期间错误:找不到该表的主键。请使用--split-by指定一个或使用'-m 1'执行顺序导入” / h2>

说明: 通常,当您在内部执行Sqoop作业时,它会在表中搜索主键。如果没有主键,则Sqoop作业将失败,并且错误如下所示:“导入期间出现错误:找不到该表的主键。请使用--split-by指定一个,或者使用'-m 1执行顺序导入”。该建议描述了这种情况的两种替代方法。

最好的方法是选项2

  1. 要将映射器的数量指定为1(默认为4)。因此,通过将映射器的数量指定为1,该任务将是连续的,并且与单线程任务相同。仅当您以小型表为目标时,这种情况才会成功,以防万一,如果您正在寻找大型导入文件,由于任务倾向于永远运行,这将失败。

  2. 最好的方法是使用分割方式,您可以在索引列的基础上指定映射器的数量,也可以手动分割列(使用query)。

答案 4 :(得分:0)

在命令中使用以下内容:

--autoreset-to-one-mapper
如果表没有主键并且没有提供分隔列,则

Import应该使用一个映射器。不能与--split-by <col>选项一起使用。