Hive 按字母排序

Posted

技术标签:

【中文标题】Hive 按字母排序【英文标题】:Hive Alphabetical sorting 【发布时间】:2017-02-22 15:06:44 【问题描述】:

当我在 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 这种预期排序结果的正确配置是什么, 以及在哪里设置。

在此致谢

【问题讨论】:

【参考方案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;

【讨论】:

我还有其他查询表的工具。所以我想要一些表约束/配置来强制它像我提到的那样表现。【参考方案2】:

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

SELECT *
FROM categories
cluster BY LOWER(category_name);

您也可以使用分发方式和排序方式选项来获得更多定制的解决方案。 选择 * 从类别 按下级分配(类别名称) SORT BY LOWER(category_name) DESC

【讨论】:

以上是关于Hive 按字母排序的主要内容,如果未能解决你的问题,请参考以下文章

JS实现首字母排序

mysql根据汉字首字母排序的方法并按字母分组

JAVA 汉字首字母排序

JS按照开头首字母排序

wps表格里的文字怎么让它按字母排列?

首先按频率对字符串中的字符进行排序,然后按字母顺序排序