spagobi mysql_SpagoBI不支持动态指定指标的原因分析

该博客介绍了如何使用SQL查询在Hive中对特定日期区间内,指定频道的接触度进行统计。通过示例展示了如何按日期合并数据,但指出Hive无法将数组转换为多列并定义别名,同时也无法支持存储过程。最后讨论了在列数固定的情况下,可能的解决方案如CASE WHEN语句或编写UDTF。
摘要由CSDN通过智能技术生成

第一步:使用SQL查询,某日期区间,某几个频道的接触度

select

count(userid) as ooc,

channelname as channelname,

dt as dt

from tvlog_test.tvlog_tcl

where dt between '2015-09-01' and '2015-09-05'

and instr('["CCTV-5体育", "CCTV-6电影", "CCTV-10科教"]', channelname) <> 0

group by dt, channelname;

Result:

91885   CCTV-5体育      2015-09-01

155304  CCTV-6电影      2015-09-01

72961   CCTV-10科教     2015-09-02

82379   CCTV-5体育      2015-09-03

22599   CCTV-6电影      2015-09-03

74714   CCTV-10科教     2015-09-04

129171  CCTV-5体育      2015-09-05

191576  CCTV-6电影      2015-09-05

68713   CCTV-10科教     2015-09-01

85925   CCTV-5体育      2015-09-02

166430  CCTV-6电影      2015-09-02

195039  CCTV-10科教     2015-09-03

107881  CCTV-5体育      2015-09-04

163962  CCTV-6电影      2015-09-04

71486   CCTV-10科教     2015-09-05

第二步:将数据按日期进行合并

注意, collect_set这个UDAF的参数不支持count

select

collect_set(t1.ooc),

collect_set(t1.channelname),

t1.dt

from

(select

count(userid) as ooc,

channelname as channelname,

dt as dt

from tvlog_test.tvlog_tcl

where dt between '2015-09-01' and '2015-09-05'

and instr('["CCTV-5体育", "CCTV-6电影", "CCTV-10科教"]', channelname) <> 0

group by dt, channelname) t1

group by t1.dt;

Result:

[68713,91885,155304]    ["CCTV-10科教","CCTV-5体育","CCTV-6电影"]       2015-09-01

[195039,82379,22599]    ["CCTV-10科教","CCTV-5体育","CCTV-6电影"]       2015-09-03

[71486,129171,191576]   ["CCTV-10科教","CCTV-5体育","CCTV-6电影"]       2015-09-05

[72961,85925,166430]    ["CCTV-10科教","CCTV-5体育","CCTV-6电影"]       2015-09-02

[74714,107881,163962]   ["CCTV-10科教","CCTV-5体育","CCTV-6电影"]       2015-09-04

结论:

1、Hive没办法将数组转成多列(列数不固定),使用UDTF不行,并且Hive也不支持存储过程。

2、即使可以转成多列,也没办法定义别名,也就是不知道该列是对应哪个列名

3、列数固定的话,可以使用case when 语句行转列或者编写一个固定列的UDTF(第二种不好,如果2,3,4,5都有需求,那要编写4个函数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值