【问题标题】:Hive Alphabetical sortingHive 按字母排序
【发布时间】: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 这种预期排序结果的正确配置是什么, 以及在哪里设置。

在此致谢

【问题讨论】:

    标签: sorting hadoop hive hql 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2011-01-30
      • 2019-04-05
      相关资源
      最近更新 更多