在 RDBMS 中没有主键的 Sqoop 导入

Posted

技术标签:

【中文标题】在 RDBMS 中没有主键的 Sqoop 导入【英文标题】:Sqoop import without primary key in RDBMS 【发布时间】:2015-03-19 06:34:01 【问题描述】:

我可以使用 sqoop 将 RDBMS 表数据(表没有主键)导入到 hive 吗?如果是的话,请给sqoop导入命令。

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

【问题讨论】:

【参考方案1】:

如果您的表没有定义主键,那么您必须提供 -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

【讨论】:

【参考方案2】:

您可以在没有 Primarykey 的情况下将数据从 RDBMS 导入 hive。

首先你需要在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>

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

快速浏览:

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

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

最好的方法是选项 2

    将映射器的数量指定为 1(默认为 4)。因此,通过将映射器的数量指定为 1,该任务将是顺序的并且与单线程任务相同。仅当您以小表为目标时才会成功,如果您正在寻找大型导入,这将失败,因为任务往往会永远运行。

    最好的方法是使用 split-by,您可以在索引列或手动拆分列的基础上指定映射器的数量(使用查询)。

【讨论】:

【参考方案5】:

在您的命令中使用以下内容:

--autoreset-to-one-mapper

Import 如果表没有主键并且没有提供拆分列,则应该使用一个映射器。它不能与--split-by &lt;col&gt; 选项一起使用。

【讨论】:

以上是关于在 RDBMS 中没有主键的 Sqoop 导入的主要内容,如果未能解决你的问题,请参考以下文章

增量导入没有 HDFS 主键的 Oracle 表

当少数表没有主键时,sqoop import-all 具有并行性

Sqoop 导入没有拆分

sqoop从hive导入数据到mysql时出现主键冲突

Microsoft Access 中有没有一种方法可以从具有复合主键的 Excel 文件中导入?

MySQL phpMyAdmin 从文本导入而没有主键?