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)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部