在蜂巢中定义为字符串的列上排序



我在Hive中创建了一个表,在其中我将order_id字段定义为字符串。但是它具有整数值。

现在,当我运行以下SQL时,我会得到不正确的结果。

select * from orders_string2 Order by order_id limit 10;
1   2013-07-25 00:00:00.0   11599   CLOSED
10  2013-07-25 00:00:00.0   5648    PENDING_PAYMENT
100 2013-07-25 00:00:00.0   12131   PROCESSING
1000    2013-07-30 00:00:00.0   2321    CLOSED
10000   2013-09-25 00:00:00.0   8983    PROCESSING
10001   2013-09-25 00:00:00.0   316 PENDING_PAYMENT
10002   2013-09-25 00:00:00.0   1530    COMPLETE
10003   2013-09-25 00:00:00.0   8099    COMPLETE
10004   2013-09-25 00:00:00.0   7768    CLOSED
10005   2013-09-25 00:00:00.0   541 COMPLETE

SQL以下给出了正确的结果:

select * from orders_string2 order by int(order_id) limit 10;
1   2013-07-25 00:00:00.0   11599   CLOSED
2   2013-07-25 00:00:00.0   256 PENDING_PAYMENT
3   2013-07-25 00:00:00.0   12111   COMPLETE
4   2013-07-25 00:00:00.0   8827    CLOSED
5   2013-07-25 00:00:00.0   11318   COMPLETE
6   2013-07-25 00:00:00.0   7130    COMPLETE
7   2013-07-25 00:00:00.0   4530    COMPLETE
8   2013-07-25 00:00:00.0   2911    PROCESSING
9   2013-07-25 00:00:00.0   5657    PENDING_PAYMENT
10  2013-07-25 00:00:00.0   5648    PENDING_PAYMENT

现在,当我遵循SQL时,我期望结果不正确。但是效果很好。

select * from orders_string2 where order_id > 100 limit 10;
101 2013-07-25 00:00:00.0   5116    CLOSED
102 2013-07-25 00:00:00.0   8027    COMPLETE
103 2013-07-25 00:00:00.0   12256   PROCESSING
104 2013-07-25 00:00:00.0   7790    PENDING_PAYMENT
105 2013-07-26 00:00:00.0   8220    COMPLETE
106 2013-07-26 00:00:00.0   395 PROCESSING
107 2013-07-26 00:00:00.0   1845    COMPLETE
108 2013-07-26 00:00:00.0   12149   PROCESSING
109 2013-07-26 00:00:00.0   9345    PENDING_PAYMENT
110 2013-07-26 00:00:00.0   2746    COMPLETE

这也可以正常工作,不需要铸造。从orders_string2选择count(*(68783

有人可以揭示这一点吗?为什么在哪里进行排序子句的工作方式不同?

在SQL字符串中按字母顺序排序。因此," 1"," 10"one_answers" 100"都在" 2"之前出现,就像" a"," ab"one_answers" abc"的方式一样。这解释了前两个查询。

运行此查询时:

select *
from orders_string2
where order_id > 100 
limit 10;

您没有order by。可以返回与where条件匹配的任何10个记录。您是"幸运的",他们是您所期望的。

如果添加了order by order_id,则您将在问题中的数据上获得其他集合。

最新更新