Hive按字母顺序排序

时间:2017-02-22 15:06:44

标签: sorting hadoop hive hql lts

当我在hive查询中有一个“order by”子句时 例如:

SELECT *
FROM categories
ORDER BY category_name

结果将首先排序为所有大写字母,然后排序所有较低的字母 我需要一些表约束或配置来强制执行下面的行为。 使用UPPER / LOWER排序的会话无济于事

当前结果:

AAA
KKK
ZZZ
aaa
bbb
yyy

预期结果

aaa
AAA
bbb
KKK
yyy
ZZZ

是否有任何配置强制配置单元首先按字母顺序排序数据。 在sql中它的排序规则 在oracle中它的LTS 这种预期排序结果的正确配置是什么, 以及设置它的位置。

先谢谢

2 个答案:

答案 0 :(得分:1)

如何使用lower()

SELECT *
FROM categories
ORDER BY LOWER(category_name);

注意:对于结果的情况,这将是任意的。因为小写字母在所有现代排序规则中都是大写字母,所以你可以这样做:

SELECT c.*
FROM categories c
ORDER BY LOWER(c.category_name), c.category_name DESC;

答案 1 :(得分:0)

为了实现字母排序或任何类型的排序,您可以在查询中使用cluster by。

SELECT *
FROM categories
cluster BY LOWER(category_name);

您也可以选择使用distribute by with sort by选项来获得更多自定义解决方案。 选择 * 来自类别 DISTRIBUTE BY LOWER(category_name) SORT BY LOWER(category_name)DESC