sqoop 是不是像在数据库中一样保留导入行的顺序

Posted

技术标签:

【中文标题】sqoop 是不是像在数据库中一样保留导入行的顺序【英文标题】:Does sqoop preserves order of imported rows as in Databasesqoop 是否像在数据库中一样保留导入行的顺序 【发布时间】:2017-04-12 11:11:22 【问题描述】:

我正在从oracle databaseAWS S3 将一个表sqooping,然后在它上面创建一个hive 表。

导入数据后,数据库中记录的顺序是否保留在hive表中?

我想使用 java JDBC 从数据库和 hive 中获取几百行,然后比较 ResultSet 中存在的每一行。假设我没有主键,我可以比较两个 ResultSets 中出现的行(依次使用 resultSet.next())还是由于并行导入而改变了顺序?

如果没有保留订单,ORDER BY 是否是一个不错的选择?

【问题讨论】:

【参考方案1】:

在导入期间不保留顺序,由于并行选择处理,在没有ORDER BYDISTRIBUTE+SORT 的情况下选择时也无法确定顺序。

选择数据时需要指定order by,不管它是如何插入的。

ORDER BY 对所有数据进行排序,将在单个 reducer 上工作,每个 reducer 的 DISTRIBUTE BY + SORT 订单并在分布式模式下工作。

另请参阅此答案https://***.com/a/40264715/2700344

【讨论】:

以上是关于sqoop 是不是像在数据库中一样保留导入行的顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何像在 Windows 资源管理器中一样在 Delphi 中获取排序顺序?

HBase sqoop 导入冻结

如何使用 Sqoop 从 RDBMS 将数据导入本地文件系统,而不是 HDFS?

Sqoop 导入失败:请使用 --split-by 指定一个或使用 '-m 1' 执行顺序导入 即使在设置 mapper = 1 后也会出错

Sqoop 导入多个表但不是全部

用sqoop 把oracle表迁移到hive 上怎么处理字段类型不一样