在HIVE中取消分组/分类

时间:2019-02-03 02:09:04

标签: hive group-by aggregate

是否有可能取消组合在蜂房数据集?我不相信您可以将侧面视图爆炸成整数。

当前表:

(".[>].*?")|<i3dMapping id=(?P<name>".*?") node=(".[>].*?")
(".[>].*?")|<i3dMapping id=(?P<name>".*?") node=(".[>].*?")\=1

结果表:

event  count
A      3
B      2

计数列显然对结果并不重要。

3 个答案:

答案 0 :(得分:1)

使用space()函数,您可以将count转换为length = count-1的空格字符串,然后使用split()将其转换为数组,并使用{{ 1}}生成行。 只需将我演示中的explode()子查询替换为表格即可。

演示:

lateral view

结果:

a

答案 1 :(得分:0)

一个选择是创建一个号码表,并使用它进行解聚。

--create numbers table
create table if not exists dbname.numbers 
location 'some_hdfs_location' as 
select stack(5,1,2,3,4,5) t as num --increase the number of values as needed

--Disaggregation
select a.event,n.num --or a.cnt
from dbname.agg_table a 
join dbname.numbers n on true
where a.cnt >= n.num and a.cnt <= n.num

答案 2 :(得分:0)

如果要分解的记录数量很高,并且您不想对其进行硬编码。

创建一个udf,它将返回数字序列

[prjai@lnx0689 py_ws]$ cat prime_num.py
import sys

    try:
            for line in sys.stdin:
                    num = int(line)
                    for i in range(1, num+1):
                            #print u"i".encode('utf-8')
                            print u"%i".encode('utf-8') %(i)
    except:
            print sys.exc_info()

将python脚本添加到蜂巢环境中

hive> add FILE /home/prjai/prvys/py_ws/prime_num.py

为上述脚本创建临时表

hive> create temporary table t1 as with t1 as (select transform(10) using 'python prime_num.py' as num1) select * from t1;

您的查询应该是-

hive> with t11 as (select 'A' as event, 3 as count) select t11.event,  t11.count from t11, t1 where t11.count>=t1.num1;

希望这会有所帮助。