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 按字母排序的主要内容,如果未能解决你的问题,请参考以下文章