hive sql中传date 指定后的“%Y-%m-%d“格式,需要加引号

本文探讨了在Hive环境中优化SQL查询的方法,通过具体案例展示了如何调整查询语句以提高查询效率,尤其是在处理大数据集时。文章对比了不同查询语句的执行效果,强调了正确使用日期格式和字符串传递的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其中dt_playtime在shell中的变量赋值为dt_playtime=`date -d "$dt" +"%Y-%m-%d"` ##需要传递为字符串,加引号才能被识别

## 先查苏打播放器的时间
原语句为:
SELECT
      did,uuid,
      if( cast(duration as float) is NULL, 0.0, cast(duration as float) ) as duration
      FROM
          mds_suda_video_playtime_hour  -- 这边日志表,是播放器的日志表,“小时级别的播放器日志表”,一小时一个日志,按小时分区存的
     WHERE dt='${hiveconf:dt_playtime}'
改写为
hive -e "SELECT suda_inter.did,
      suda_inter.uuid,
      max(suda_inter.duration) as suda_durseconds
      FROM(
        SELECT
          did,uuid,
          if( cast(duration as float) is NULL, 0.0, cast(duration as float) ) as duration
          FROM
              mds_suda_video_playtime_hour
         WHERE dt='2020-07-16') suda_inter
     GROUP BY suda_inter.did,suda_inter.uuid
     limit 100;"
## 这上面的dt必须要加引号才能有结果。其中dt_playtime在shell中的变量赋值为dt_playtime=`date -d "$dt" +"%Y-%m-%d"`
##需要传递为字符串才能被识别
#f2817e2796dbf018        ef6814f2a063378aa020cfa6fb3e66e3        11.0
#e1d82800867fca03        fcefd08cd9083c43a7822a7a2cd169e2        6.0
#3ef38f5a2d17f708        8e1112b61d3e35fe9a977071c65400e6        37.0

## 再查apache播放器的时间
## 原语句为:

SELECT
  device_id,uuid,req_id,
  collect_set(play_duration)      as play_duration, -- 播放时长
  FROM
      mds_apache_code_v3  -- web的后台日志表,web 端的所有行为数据日志都有,
 WHERE dt='${hiveconf:dt}'
 GROUP BY device_id,uuid,req_id,timestamp
 --上面的dt传时间格式为20200716,可加引号可不加

hive -e "SELECT
      device_id,uuid,
      collect_set(play_duration)      as play_duration
      FROM mds_apache_code_v3
     WHERE dt=20200716
     GROUP BY device_id,uuid,req_id,timestamp
     limit 100"

#上面的dt 是没有加引号的,但是有结果
#结果: 是有非空时长的,即apache这的duration 是有播放时长的
#000168c99f29f3b5        60920638655b3ff6b5c3103741081a97        []
#000168c99f29f3b5        fb3046a7d0743b15909d9a7872e651af        ["9"]
#00016cfb8a33e617        62a447a637553f4c85b3b9f642b0adce        []


hive -e "SELECT
      device_id,uuid,
      collect_set(play_duration)      as play_duration
      FROM mds_apache_code_v3
     WHERE dt='20200716'
     GROUP BY device_id,uuid,req_id,timestamp
     limit 100"

#加引号也有结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值