hive中grouping sets的使用

set hive.new.job.grouping.set.cardinality = 30;

此设置的意义是告诉解释器,在GROUP BY之前,每条数据的副本数不到30份。

[En]

The meaning of this setting is to tell the interpreter that before group by, the number of copies of each piece of data was less than 30 copies.

grouping sets是一种将多个group by 逻辑写在一个sql语句中的便利写法。

demo:

GROUPING SET中的四个GROUP BY组合代表四个GROUP BY组合,这相当于使用四个不同的GROUP BY策略编写四个SQL查询。

[En]

The four group by combinations in grouping sets represent four group by combinations, which is equivalent to writing four sql queries using four different group by strategies.

group_id是为了区分每条输出结果是属于哪一个group by的数据。它是根据group by后面声明的顺序字段是否存在于当前group by中的一个二进制位组合数据。 比如(A,C)的group_id: group_id(A,C) = grouping(A)+grouping(B)+grouping (C) 的结果就是:二进制:101 也就是5.

select中的字段是完整的A,B,C,但是我们知道由于group by的存在,select 字段本不应该出现非group by字段的,所以这里我们要特别说明,如果解释器发现group by A,C 但是select A,B,C 那么运行时会将所有from 表取出的结果复制一份,B都置为null,也就是在结果中,B都为null。

Original: https://www.cnblogs.com/ToDoToTry/p/5474231.html
Author: fandyst
Title: hive中grouping sets的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6841/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总