使用 Hive 'Order By' 查询时获取无序输出
Getting unordered output while using Hive 'Order By' query
我试过使用 'Order by' 如下:
select fieldA,fieldB,fieldC,fieldD from testfilter where fieldA ='000009000002'order by fieldA,fieldB,fieldC,fieldD;
但是,这会导致像这样的无序输出:
000009000002 7212 023 653
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 24
000009000002 9999 058 25
000009000002 9999 058 299
000009000002 9999 058 399
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
可能是什么原因?
注意:我使用的是 Hive 0.10。
如果我没记错的话,您似乎将所有列的数据类型都保留为 String.
所以数据的排序正在发生,但对于字符串也是如此,即字典顺序。
000009000002 7212 023 653
//一组
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 24
000009000002 9999 058 25
000009000002 9999 058 299
000009000002 9999 058 399
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
//第二组
此处前三列是相同的值,但最后一列是按字典顺序组织的。
因为1小于2,所以159在前,24在后,以此类推..
所以可以修改数据类型为int
希望对您有所帮助...!!
我试过使用 'Order by' 如下:
select fieldA,fieldB,fieldC,fieldD from testfilter where fieldA ='000009000002'order by fieldA,fieldB,fieldC,fieldD;
但是,这会导致像这样的无序输出:
000009000002 7212 023 653
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 24
000009000002 9999 058 25
000009000002 9999 058 299
000009000002 9999 058 399
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
可能是什么原因?
注意:我使用的是 Hive 0.10。
如果我没记错的话,您似乎将所有列的数据类型都保留为 String.
所以数据的排序正在发生,但对于字符串也是如此,即字典顺序。
000009000002 7212 023 653
//一组
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 159
000009000002 9999 058 24
000009000002 9999 058 25
000009000002 9999 058 299
000009000002 9999 058 399
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
000009000002 9999 058 99
//第二组
此处前三列是相同的值,但最后一列是按字典顺序组织的。
因为1小于2,所以159在前,24在后,以此类推..
所以可以修改数据类型为int
希望对您有所帮助...!!