一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

一、目的

指标需要查询以工作日和周末维度的数据统计,因此需要根据数据的日期判断这一天属于星期几,周一到周五为工作日,周六到周日为周末

二、SQL查询

(一)SQL语句

select
     day,
     case when pmod(datediff(create_time,'2023-05-02') + 1,7) = 1 then '周一'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 2 then '周二'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 3 then '周三'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 4 then '周四'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 5 then '周五'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 6 then '周六'
    else '周日' end as week_time
from hurys_dc_dwd.dwd_statistics
group by day, case when pmod(datediff(create_time,'2023-05-02') + 1,7) = 1 then '周一'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 2 then '周二'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 3 then '周三'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 4 then '周四'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 5 then '周五'
    when pmod(datediff(create_time,'2023-05-02') + 1,7) = 6 then '周六'
    else '周日' end;

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

(二)SQL语句查询结果

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

今天是2023年9月26日,周二!

(三)注意点

2023-05-02为任意一天的周二,不是选周一或者周日,这个可以自行验证!

—————————————–20240201更新—————————————–

本来以为SQL里日期选择任一周二即可,结果发现这是在没有执行调优语句前提下才有用

如下图所示,没有执行Hive调优

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

在这种情形下,以前的周二2023-05-02是有用的,今天是2024-02-01,周四

但是,如果执行Hive调优后,比如

set hive.vectorized.execution.enabled=false;

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

执行调优后,如果还是SQL里还是周二,就查询结果有问题

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

结果是2024-02-01,周三,但是今天却是周四!!!!

因此,在执行Hive调优后,必须将以前的周二2023-05-02改为周一2023-05-01

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

所以,在执行Hive调优后,SQL里的日期应该为周一

最后,总结一下,SQL执行后应该对结果进行检查,不同的情形说不定会有不同的结果!

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/5767e38d0b.html