二百七十六、ClickHouse——Hive和ClickHouse非常不同的DWS指标数据SQL语句

一、目的

在完成数据之后对业务指标进行分析,Hive和ClickHouseSQL真不一样

二、部分业务指标表

2.1 统计数据流量表1天周期

2.1.1 Hive中原有代码

2.1.1.1 Hive中建表语句
复制代码
--1、统计数据流量表——动态分区——1天周期
create  table  if not exists  hurys_db.dws_statistics_volume_1day(
    device_no        string         comment '设备编号',
    scene_name       string         comment '场景名称',
    lane_no          int            comment '车道编号',
    lane_direction   string         comment '车道流向',
    section_no       int            comment '断面编号',
    device_direction string         comment '雷达朝向',
    sum_volume_day   int            comment '每天总流量',
    week_day         string         comment '周几',
    month            string         comment '月份'
)
comment '统计数据流量表——动态分区——1天周期'
partitioned by (day string)
stored as orc
;
2.1.1.2 Hive中SQL语句
复制代码
--动态加载数据
insert  overwrite  table  hurys_db.dws_statistics_volume_1day  partition(day)
select
       dwd_st.device_no,
       dwd_sc.scene_name,
       dwd_st.lane_no,
       dwd_rl.lane_direction,
       dwd_st.section_no,
       dwd_rc.device_direction,
       sum(volume_sum) sum_volume_day,
       case when pmod(datediff(create_time,'2023-11-27') + 1,7) = 1 then '周一'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 2 then '周二'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 3 then '周三'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 4 then '周四'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 5 then '周五'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 6 then '周六'
      else '周日' end as week_day,
       substr(day,1,7) month,
       day
from hurys_db.dwd_statistics as dwd_st
   right join hurys_db.dwd_radar_lane as dwd_rl
             on dwd_rl.device_no=dwd_st.device_no and dwd_rl.lane_no=dwd_st.lane_no
   right join hurys_db.dwd_device_scene as dwd_ds
             on dwd_ds.device_no=dwd_st.device_no
   right join hurys_db.dwd_scene as dwd_sc
             on dwd_sc.scene_id = dwd_ds.scene_id
   right join hurys_db.dwd_radar_config as dwd_rc
             on dwd_rc.device_no=dwd_st.device_no
where dwd_st.create_time is not null   and   dwd_st.day='2024-09-05'
group by dwd_st.device_no, dwd_sc.scene_name, dwd_st.lane_no, dwd_rl.lane_direction, dwd_st.section_no, dwd_rc.device_direction, case when pmod(datediff(create_time,'2023-11-27') + 1,7) = 1 then '周一'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 2 then '周二'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 3 then '周三'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 4 then '周四'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 5 then '周五'
           when pmod(datediff(create_time,'2023-11-27') + 1,7) = 6 then '周六'
      else '周日' end, day
;

2.1.2 ClickHouse中现有代码

2.1.2.1 ClickHouse中表结构
复制代码
--1、统计数据流量表——动态分区——1天周期
create  table  if not exists  hurys_jw.dws_statistics_volume_1day(
    device_no        String                   comment '设备编号',
    scene_name       String                   comment '场景名称',
    lane_no          Nullable(Int32)          comment '车道编号',
    lane_direction   Nullable(String)         comment '车道流向',
    section_no       Nullable(Int32)          comment '断面编号',
    device_direction Nullable(String)         comment '雷达朝向',
    sum_volume_day   Nullable(Int32)          comment '每天总流量',
    week_day         Nullable(String)         comment '周几',
    month            Nullable(String)         comment '月份',
    day              Date                    comment '日期'
)
ENGINE = MergeTree
PARTITION BY day
PRIMARY KEY day
ORDER BY day
SETTINGS index_granularity = 8192;
2.1.2.2 ClickHouse中SQL语句
复制代码
--动态加载数据
select
       dwd_st.device_no,
       dwd_sc.scene_name,
       dwd_st.lane_no,
       dwd_rl.lane_direction,
       dwd_st.section_no,
       dwd_rc.device_direction,
       sum(volume_sum) sum_volume_day,
       case when toDayOfWeek(create_time) = 1 then '周一'
            when toDayOfWeek(create_time) = 2 then '周二'
            when toDayOfWeek(create_time) = 3 then '周三'
            when toDayOfWeek(create_time) = 4 then '周四'
            when toDayOfWeek(create_time) = 5 then '周五'
            when toDayOfWeek(create_time) = 6 then '周六'
            when toDayOfWeek(create_time) = 7 then '周日'
        end as week_day,
    concat(toString(toYear(dwd_st.day)), '-', lpad(toString(toMonth(dwd_st.day)), 2, '0')) AS month,
    cast(dwd_st.day as String) day
from hurys_jw.dwd_statistics as dwd_st
   right join hurys_jw.dwd_radar_lane as dwd_rl
             on dwd_rl.device_no=dwd_st.device_no and dwd_rl.lane_no=dwd_st.lane_no
   right join hurys_jw.dwd_device_scene as dwd_ds
             on dwd_ds.device_no=dwd_st.device_no
   right join hurys_jw.dwd_scene as dwd_sc
             on dwd_sc.scene_id = dwd_ds.scene_id
   right join hurys_jw.dwd_radar_config as dwd_rc
             on dwd_rc.device_no=dwd_st.device_no
where dwd_st.create_time is not null and dwd_st.lane_no is not null  and   dwd_st.day >= ?
group by  dwd_st.device_no, dwd_sc.scene_name, dwd_st.lane_no, dwd_rl.lane_direction, dwd_st.section_no, dwd_rc.device_direction, case when toDayOfWeek(create_time) = 1 then '周一'
            when toDayOfWeek(create_time) = 2 then '周二'
            when toDayOfWeek(create_time) = 3 then '周三'
            when toDayOfWeek(create_time) = 4 then '周四'
            when toDayOfWeek(create_time) = 5 then '周五'
            when toDayOfWeek(create_time) = 6 then '周六'
            when toDayOfWeek(create_time) = 7 then '周日'
        end, dwd_st.day
;

2.2 统计数据流量表5分钟周期

2.2.1 Hive中原有代码

2.2.1.1 Hive中建表语句
复制代码
--5、统计数据流量表——动态分区——5分钟周期
create  table  if not exists  hurys_db.dws_statistics_volume_5min(
    device_no        string         comment '设备编号',
    scene_name       string         comment '场景名称',
    lane_no          int            comment '车道编号',
    lane_direction   string         comment '车道流向',
    section_no       int            comment '断面编号',
    device_direction string         comment '雷达朝向',
    sum_volume_5min  int            comment '每5分钟总流量',
    start_time       timestamp      comment '开始时间'
)
comment '统计数据流量表——动态分区——5分钟周期'
partitioned by (day string)
stored as orc
;
2.2.1.2 Hive中SQL语句
复制代码
--动态加载数据
insert  overwrite  table  hurys_db.dws_statistics_volume_5min  partition(day)
select
       dwd_st.device_no,
       dwd_sc.scene_name,
       dwd_st.lane_no,
       dwd_rl.lane_direction,
       dwd_st.section_no,
       dwd_rc.device_direction,
       sum(volume_sum)   sum_volume_5min,
      case   when  minute(create_time ) < 5 then
        concat(substr(create_time, 1, 14), '00:00')
      when minute(create_time) >=5 and minute(create_time) <10 then
        concat(substr(create_time, 1, 14), '05:00')
      when minute(create_time) >=10 and minute(create_time) <15 then
        concat(substr(create_time, 1, 14), '10:00')
      when minute(create_time) >=15 and minute(create_time) <20 then
        concat(substr(create_time, 1, 14), '15:00')
      when minute(create_time) >=20 and minute(create_time) <25 then
        concat(substr(create_time, 1, 14), '20:00')
      when minute(create_time) >=25 and minute(create_time) <30 then
        concat(substr(create_time, 1, 14), '25:00')
      when minute(create_time) >=30 and minute(create_time) <35 then
        concat(substr(create_time, 1, 14), '30:00')
      when minute(create_time) >=35 and minute(create_time) <40 then
        concat(substr(create_time, 1, 14), '35:00')
      when minute(create_time) >=40 and minute(create_time) <45 then
        concat(substr(create_time, 1, 14), '40:00')
      when minute(create_time) >=45 and minute(create_time) <50 then
        concat(substr(create_time, 1, 14), '45:00')
      when minute(create_time) >=50 and minute(create_time) <55 then
        concat(substr(create_time, 1, 14), '50:00')
     else
        concat(substr(create_time, 1, 14), '55:00') end as start_time,
       day
from hurys_db.dwd_statistics as dwd_st
    right join hurys_db.dwd_radar_lane as dwd_rl
              on dwd_rl.device_no=dwd_st.device_no and dwd_rl.lane_no=dwd_st.lane_no
    right join hurys_db.dwd_device_scene as dwd_ds
              on dwd_ds.device_no=dwd_st.device_no
    right join hurys_db.dwd_scene as dwd_sc
              on dwd_sc.scene_id = dwd_ds.scene_id
    right join hurys_db.dwd_radar_config as dwd_rc
              on dwd_rc.device_no=dwd_st.device_no
where dwd_st.create_time is not null   and   dwd_st.day='2024-09-05'
group by dwd_st.device_no, dwd_sc.scene_name, dwd_st.lane_no, dwd_rl.lane_direction, dwd_st.section_no, dwd_rc.device_direction, case   when  minute(create_time ) < 5 then
        concat(substr(create_time, 1, 14), '00:00')
      when minute(create_time) >=5 and minute(create_time) <10 then
        concat(substr(create_time, 1, 14), '05:00')
      when minute(create_time) >=10 and minute(create_time) <15 then
        concat(substr(create_time, 1, 14), '10:00')
      when minute(create_time) >=15 and minute(create_time) <20 then
        concat(substr(create_time, 1, 14), '15:00')
      when minute(create_time) >=20 and minute(create_time) <25 then
        concat(substr(create_time, 1, 14), '20:00')
      when minute(create_time) >=25 and minute(create_time) <30 then
        concat(substr(create_time, 1, 14), '25:00')
      when minute(create_time) >=30 and minute(create_time) <35 then
        concat(substr(create_time, 1, 14), '30:00')
      when minute(create_time) >=35 and minute(create_time) <40 then
        concat(substr(create_time, 1, 14), '35:00')
      when minute(create_time) >=40 and minute(create_time) <45 then
        concat(substr(create_time, 1, 14), '40:00')
      when minute(create_time) >=45 and minute(create_time) <50 then
        concat(substr(create_time, 1, 14), '45:00')
      when minute(create_time) >=50 and minute(create_time) <55 then
        concat(substr(create_time, 1, 14), '50:00')
     else
        concat(substr(create_time, 1, 14), '55:00') end, day
;

2.2.2 ClickHouse中现有代码

2.2.2.1 ClickHouse中表结构
复制代码
--5、统计数据流量表——动态分区——5分钟周期
create  table  if not exists  hurys_jw.dws_statistics_volume_5min(
    device_no        String                   comment '设备编号',
    scene_name       String                   comment '场景名称',
    lane_no          Nullable(Int32)          comment '车道编号',
    lane_direction   Nullable(String)         comment '车道流向',
    section_no       Nullable(Int32)          comment '断面编号',
    device_direction Nullable(String)         comment '雷达朝向',
    sum_volume_5min  Nullable(Int32)          comment '每5分钟总流量',
    start_time       DateTime                 comment '开始时间',
    day              Date                    comment '日期'
)
ENGINE = MergeTree
PARTITION BY day
PRIMARY KEY day
ORDER BY day
SETTINGS index_granularity = 8192;
2.2.2.2 ClickHouse中SQL语句
复制代码
--动态加载数据
select
       dwd_st.device_no,
       dwd_sc.scene_name,
       dwd_st.lane_no,
       dwd_rl.lane_direction,
       dwd_st.section_no,
       dwd_rc.device_direction,
       sum(volume_sum)   sum_volume_5min,
        toDateTime(concat(toString(toDate(create_time)),' ',lpad(toString(extract(hour FROM create_time)), 2, '0'),':',
            CASE
                WHEN extract(minute FROM create_time) < 5 THEN '00'
                WHEN extract(minute FROM create_time) >= 5 AND extract(minute FROM create_time) < 10 THEN '05'
                WHEN extract(minute FROM create_time) >= 10 AND extract(minute FROM create_time) < 15 THEN '10'
                WHEN extract(minute FROM create_time) >= 15 AND extract(minute FROM create_time) < 20 THEN '15'
                WHEN extract(minute FROM create_time) >= 20 AND extract(minute FROM create_time) < 25 THEN '20'
                WHEN extract(minute FROM create_time) >= 25 AND extract(minute FROM create_time) < 30 THEN '25'
                WHEN extract(minute FROM create_time) >= 30 AND extract(minute FROM create_time) < 35 THEN '30'
                WHEN extract(minute FROM create_time) >= 35 AND extract(minute FROM create_time) < 40 THEN '35'
                WHEN extract(minute FROM create_time) >= 40 AND extract(minute FROM create_time) < 45 THEN '40'
                WHEN extract(minute FROM create_time) >= 45 AND extract(minute FROM create_time) < 50 THEN '45'
                WHEN extract(minute FROM create_time) >= 50 AND extract(minute FROM create_time) < 55 THEN '50'
                ELSE '55'
            END,
            ':00'
        ))  as start_time,
       cast(dwd_st.day as String) day
from hurys_jw.dwd_statistics as dwd_st
    right join hurys_jw.dwd_radar_lane as dwd_rl
              on dwd_rl.device_no=dwd_st.device_no and dwd_rl.lane_no=dwd_st.lane_no
    right join hurys_jw.dwd_device_scene as dwd_ds
              on dwd_ds.device_no=dwd_st.device_no
    right join hurys_jw.dwd_scene as dwd_sc
              on dwd_sc.scene_id = dwd_ds.scene_id
    right join hurys_jw.dwd_radar_config as dwd_rc
              on dwd_rc.device_no=dwd_st.device_no
where dwd_st.create_time is not null   and  dwd_st.lane_no is not null   and   dwd_st.day >= ?
group by dwd_st.device_no, dwd_sc.scene_name, dwd_st.lane_no, dwd_rl.lane_direction, dwd_st.section_no, dwd_rc.device_direction, toDateTime(concat(toString(toDate(create_time)),' ',lpad(toString(extract(hour FROM create_time)), 2, '0'),':',
            CASE
                WHEN extract(minute FROM create_time) < 5 THEN '00'
                WHEN extract(minute FROM create_time) >= 5 AND extract(minute FROM create_time) < 10 THEN '05'
                WHEN extract(minute FROM create_time) >= 10 AND extract(minute FROM create_time) < 15 THEN '10'
                WHEN extract(minute FROM create_time) >= 15 AND extract(minute FROM create_time) < 20 THEN '15'
                WHEN extract(minute FROM create_time) >= 20 AND extract(minute FROM create_time) < 25 THEN '20'
                WHEN extract(minute FROM create_time) >= 25 AND extract(minute FROM create_time) < 30 THEN '25'
                WHEN extract(minute FROM create_time) >= 30 AND extract(minute FROM create_time) < 35 THEN '30'
                WHEN extract(minute FROM create_time) >= 35 AND extract(minute FROM create_time) < 40 THEN '35'
                WHEN extract(minute FROM create_time) >= 40 AND extract(minute FROM create_time) < 45 THEN '40'
                WHEN extract(minute FROM create_time) >= 45 AND extract(minute FROM create_time) < 50 THEN '45'
                WHEN extract(minute FROM create_time) >= 50 AND extract(minute FROM create_time) < 55 THEN '50'
                ELSE '55'
            END,
            ':00'
        )), cast(dwd_st.day as String)
;

就先这样,反正ClickHouse和Hive的SQL语句非常非常不一样!!!

相关推荐
houzhizhen19 小时前
HiveMetastore 的架构简析
hive
数据要素X1 天前
【数据仓库】Hive 拉链表实践
大数据·数据库·数据仓库·人工智能·hive·hadoop·安全
gengjianchun1 天前
clickhouse 安装配置
服务器·网络·clickhouse
东皋长歌1 天前
ClickHouse安装
clickhouse
大嘴吧Lucy1 天前
实战攻略 | ClickHouse优化之FINAL查询加速
数据库·mysql·clickhouse
东皋长歌1 天前
SpringBoot+ClickHouse集成
clickhouse·springboot
LiamTuc2 天前
远程访问,通过JDBC连接到Beeline对Hive进行操作报错
数据仓库·hive·hadoop
songqq272 天前
sql中判断一个字段是否包含一个数据的方法有哪些?
数据库·hive·sql
zmd-zk2 天前
sql在hive和阿里云maxComputer的区别
数据库·hive·sql
油头少年_w2 天前
Hive操作库、操作表及数据仓库的简单介绍
数据仓库·hive