闲来饮茶唔

题 :如果有500多个事件,每天都有可能发生变化,想统计出一年内每一天不同事件的集合,一条sql写出
思路:
1 判断 通过单一字段识别当天变化还是通过联合字段识别 (打标签识别)
2 设计每天增量表记录变动事件
3 根据全年事件group by , 再用 collect_list 集合起来。
两种写法,1 sql 2 pyspark(书写更简单点)

plan A(伪代码)
– log_label (可以是组合字段:识别相同事件的不同变化)
– log_event
select log_event
,collect_list (‘,’,concat_ws(log_label))
from
(select ta.log_event
,ta.log_label
,case when ta.log_label!=tb.log_event then 1 else 0 end as label
,ta.dayno
from
(select log_event, log_label ,dayno
from table_a
where dayno >‘2020-12-31’ and dayno<=‘2021-12-31’
group by dayno )ta
left join
(select log_event, log_label ,date_add(dayno,1) as dayno1
from table_a
where dayno >=‘2020-12-31’ and dayno<‘2021-12-31’
group by dayno )tb
on ta.log_event = tb.log_event and ta.dayno=tb.dayno1
group by
ta.log_event
,ta.log_label
,case when ta.log_label!=tb.log_event then 1 else 0 end
,ta.dayno
)sa
where sa.label=1
group by log_event

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值