sqoop 是不是像在数据库中一样保留导入行的顺序
Posted
技术标签:
【中文标题】sqoop 是不是像在数据库中一样保留导入行的顺序【英文标题】:Does sqoop preserves order of imported rows as in Databasesqoop 是否像在数据库中一样保留导入行的顺序 【发布时间】:2017-04-12 11:11:22 【问题描述】:我正在从oracle database
到AWS S3
将一个表sqooping,然后在它上面创建一个hive
表。
导入数据后,数据库中记录的顺序是否保留在hive表中?
我想使用 java JDBC 从数据库和 hive 中获取几百行,然后比较 ResultSet
中存在的每一行。假设我没有主键,我可以比较两个 ResultSets
中出现的行(依次使用 resultSet.next()
)还是由于并行导入而改变了顺序?
如果没有保留订单,ORDER BY
是否是一个不错的选择?
【问题讨论】:
【参考方案1】:在导入期间不保留顺序,由于并行选择处理,在没有ORDER BY
或DISTRIBUTE+SORT
的情况下选择时也无法确定顺序。
选择数据时需要指定order by
,不管它是如何插入的。
ORDER BY 对所有数据进行排序,将在单个 reducer 上工作,每个 reducer 的 DISTRIBUTE BY + SORT 订单并在分布式模式下工作。
另请参阅此答案https://***.com/a/40264715/2700344
【讨论】:
以上是关于sqoop 是不是像在数据库中一样保留导入行的顺序的主要内容,如果未能解决你的问题,请参考以下文章
如何像在 Windows 资源管理器中一样在 Delphi 中获取排序顺序?
如何使用 Sqoop 从 RDBMS 将数据导入本地文件系统,而不是 HDFS?
Sqoop 导入失败:请使用 --split-by 指定一个或使用 '-m 1' 执行顺序导入 即使在设置 mapper = 1 后也会出错