hadoop - Impala 查询以随机顺序返回数据
问题描述
我希望我对表的 select * 查询以与数据库中存在的顺序相同的顺序返回。但是,它以随机顺序返回数据。在 Hive 中执行相同的查询时,我以正确的顺序获取数据集。有没有办法让impala以与数据库中相同的顺序返回结果集?
解决方案
ORDER BY
没有定义查询返回的行的顺序。由于并行和分布式执行,返回的顺序可能因运行而异,有些进程可以执行得更快,有些进程可以在队列中等待,它们都会相互独立地发出数据。
同样根据经典的 Codd 关系理论,表中的行顺序和列顺序对数据库来说并不重要。您可以在插入到表的过程中对数据进行排序,排序后的数据将被更好地压缩,内部索引和布隆过滤器会更好地工作,但是如果没有ORDER BY
. Hive 也是一样,在某些情况下,只有一个 mapper 启动了,没有 reducer 时,数据会按照数据文件中的顺序返回,但不要依赖它,如果需要排序,请添加 ORDER BY .
只有单线程处理才能以相同的顺序返回数据,但这会降低性能。更好地重新设计您的数据流并添加一些排序列,以便能够在分布式环境中选择期间对行进行排序。
推荐阅读
- android - 如果我从 Android 上卸载了一个应用程序,比如 WhatsApp,那么数据库是否仍然存在?
- angular - 角度选择选项隐藏不活动但仍显示历史价值
- spring - 我在 Centos 中使用 Mongodb(在我的 mac 中使用 VirtualBox)和在我的 mac 中使用 Spring4。所以它们没有连接每个
- hyperledger-fabric - Hyperledger Fabric 函数重命名导致错误
- php - PHP Href 有不同的 url
- python - int object is not subscriptable python中的错误
- python - 无法解决 TypeError: unorderable types: time.struct_time() > float()
- vba - Microsoft Visio 2013 / 16 的形状连接邻居类型的自动检测
- android - Koin 在模块之间共享实例
- java - 从millis开始错误的int day