大数据--hive9--实战训练之数据查询与hive中谓词使用细节问题

目录一:代码样例二:多字段分组还是单字段分组三:group by用法细节四:使用concat_ws(',',concat(),concat(),concat())的好处五:对concat_ws连接起来的data_type字段进行切割六:报表的sql逻辑七. max case when ... then ... end八 深度解析case when 条件1 then ... else 0 end的作用九. describe和show表名的区别一:代码样例下面...
摘要由CSDN通过智能技术生成

目录

一:代码样例 

二:多字段分组还是单字段分组

三:group by用法细节

四:使用concat_ws(',',concat(),concat(),concat())的好处

五:对concat_ws连接起来的data_type字段进行切割

六:报表的sql逻辑

七. max case when ... then ... end 

八 深度解析case when 条件1  then ... else 0 end的作用

九. describe和show表名的区别


一:代码样例 

下面代码大致框架:内部select分组查询,外部explode炸开后再分组,然后进行select查询。

insert overwrite table temp_table
partition(event_day='{DATE}',dim_type='quanping')

select concat_ws(
  '\t',
  cast('{DATE}' as string),
  cast(coalesce(B.os, '-') as string),
  cast(coalesce(B.version, '-') as string),
  cast(coalesce(split(tmp_table.data_type, '\\|')[0], '-') as string),
  cast('all' as string),
  cast('all' as string),
  cast(coalesce(sum(split(tmp_table.data_type, '\\|')[1]), 0) as string),
  cast(coalesce(count(distinct cuid), 0) as string)
) as dim_value
from(
  select
  os,
  soft_version,
  cuid,
  concat_ws(
    ',',
    concat('整个屏幕展示', '|',count(case when k='click' and v='fullscreen' then 1 end)), 
    concat('上下方向', '|',count(case when k='click' and v in ('up_slide','down_slide') and tab='full_screen' then 1 end)),
    concat('完整屏幕read', '|',count(case when k='read' and rmb_params['is_fullscreen'] = '1' then 1 end))   
  ) as data_type
  from goodview_table
  where event_day='{DATE}'
  and is_spam=0
  and
  (
    (k='click' and v='fullscreen')
    or
    (k='click' and v in ('up_slide','down_slide') and tab='full_screen')
    or
    (k='read' and rmb_params['is_fullscreen']='1')  -- 筛选条件
  )
  group by
  os,
  soft_version,
  cuid
)tab
lateral view explode(split(data_type,',')) tmp_table as data_type
lateral view explode(array('all',os)) B as os
lateral view explode(array('all',soft_version)) B as version
where split(tmp_table.data_type,'\\|')[1] > 0
group by
B.os,
B.version,
split(tmp_table.data_type,'\\|')[0]

【上述数据,名称,核心等已经进行过处理,不涉及具体业务,如有侵权必删】

从里面忘外看,select os,soft_version,cuid,concat_ws(',',concat(维度一及其数量),concat(维度二及其数量),concat(维度三及其数量))

                         where+限制条件 +

                        group by os, soft_version,cuid (分组约束)

二:多字段分组还是单字段分组

[注意]:我们的分组有三个字段,分别是os,soft_version,cuid,它的作用是干啥,为什么不直接使用cuid分组呢?

               答:对所有数据按照os,soft_version, cuid进行分组,故原始一条条数据变成了一组组数据

                     直接使用cuid一个字段分组可以吗?:虽然我们日常理解的是:cuid可以唯一标识一部手机,相当于MySQL中主键一词的意思,但是我们需要有辩证的思维,

                     cuid在唯一标识一部手机的时候可以视为"主键",但是在不同场景下,它又不是主键了,例如此处是对应的日志情况,一部手机可以产生多条日志,所以此时

                    直接使用cuid分组和使用os,soft_version,cuid进行分组的效果是不同的。补充一句:如果,我说如果cuid是主键,那么此时使用cuid分组和使用os,soft_version,cuid

                    进行分组的效果是相同的</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值