ToB企服应用市场:ToB评测及商务社交产业平台

标题: HiveSQL 工作实战总结 [打印本页]

作者: 民工心事    时间: 2023-2-13 22:08
标题: HiveSQL 工作实战总结
记录一些工作中有意思的统计指标,做过一些简化方便大家阅读,记录如有错误,欢迎在评论区提问讨论~
问题类型

一、统计每个设备的累计告警次数

原始数据格式

deviceIdalarmDatealarmCount设备ID告警日期告警次数u012022/1/85u022022/1/87u032022/1/83u012022/1/122u022022/1/121u012022/1/149.........统计之后格式

设备ID告警月份告警次数小计告警次数累计u012022-021111u022022-031223............工作思路

工作语句

  1. SELECT *,
  2.            SUM(sumPart) OVER (PARTITION BY deviceId ORDER BY alarmMonth) AS sumAll
  3. FROM
  4. (SELECT deviceId,
  5.            SUBSTR(alarmDate,1,7) AS alarmMonth,
  6.            SUM(alarmCount) AS sumPart
  7. FROM test_00
  8. GROUP BY deviceId,
  9.                  alarmMonth) t;
复制代码
  1. SELECT *,
  2.            SUM(sumPart) OVER (PARTITION BY deviceId ORDER BY alarmMonth) AS sumAll
  3. FROM
  4. (SELECT deviceId,
  5.             DATE_FORMAT(REGEXP_REPLACE(alarmDate,'/','-'), 'yyyy-MM') AS alarmMonth,
  6.             SUM(alarmCount) AS sumPart
  7. FROM test_00
  8. GROUP BY deviceId,
  9.                  alarmMonth) t;
复制代码
开窗函数中的界限说明

二、统计环境设备每天的总污染告警次数,并输出每个设备告警次数排名前三的日期

原始数据格式

deviceIdalarmTime设备ID告警时间u012022/1/8/08/04/58u022022/1/8/12/05/38u032022/1/8/17/01/12u012022/1/12/12/04/53u022022/1/12/13/45/34u012022/1/14/02/12/51......统计之后格式

设备ID告警次数累计u013u022u031......工作思路

统计环境设备的总污染告警次数

输出每个设备告警次数排名前三的日期

工作语句

统计环境设备的总污染告警次数
  1. SELECT deviceId,
  2.                 COUNT(alarmTime) AS alarmCount
  3. FROM
  4. --- http://c.biancheng.net/mysql/date_format.html
  5. (SELECT deviceId,
  6.                 DATE_FORMAT(REGEXP_REPLACE(alarmTime,'/','-'), 'yyyy-MM-dd HH:mm:ss') AS alarmTime
  7. FROM test_01
  8. GROUP BY deviceId,alarmTime
  9. ORDER BY alarmTime) t
  10. GROUP BY deviceId;
复制代码
输出每个设备告警次数排名前三的日期
  1. SELECT *
  2. FROM
  3. (SELECT deviceId,
  4.                 alarmDate,
  5.                 alarmCount,
  6.                 ROW_NUMBER() OVER(PARTITION BY deviceId ORDER BY alarmCount DESC) AS alarmRank
  7. FROM
  8. (SELECT deviceId,
  9.                 alarmDate,
  10.                 COUNT(alarmDate) AS alarmCount
  11. FROM
  12. (SELECT deviceId,
  13.                 DATE_FORMAT(alarmTime, 'yyyy-MM-dd') AS alarmDate,
  14.                 DATE_FORMAT(alarmTime, 'yyyy-MM-dd HH:mm:ss') AS alarmTime
  15. FROM test_01
  16. GROUP BY deviceId,alarmTime
  17. ORDER BY deviceId,alarmTime) t1
  18. GROUP BY deviceId,alarmDate) t2) t3
  19. WHERE alarmRank<=3;
  20. -- 使用WITH语句优化一下
  21. WITH t1 AS (
  22. SELECT deviceId,
  23.         DATE_FORMAT(alarmTime, 'yyyy-MM-dd') AS alarmDate,
  24.         DATE_FORMAT(alarmTime, 'yyyy-MM-dd HH:mm:ss') AS alarmTime
  25. FROM test_01
  26. GROUP BY deviceId,alarmTime
  27. ORDER BY deviceId,alarmTime),
  28. t2 AS (
  29.         SELECT deviceId,
  30.         alarmDate,
  31.         COUNT(alarmDate) AS alarmCount
  32. FROM t1
  33. GROUP BY deviceId,alarmDate),
  34. t3 AS (
  35. SELECT deviceId,
  36.         alarmDate,
  37.         alarmCount,
  38.         ROW_NUMBER() OVER(PARTITION BY deviceId ORDER BY alarmCount DESC) AS alarmRank
  39. FROM t2)
  40. SELECT * FROM t3 WHERE alarmRank<=3;
复制代码
合并操作符union和union all之间的区别

Hive和MySQL中的日期函数

七、统计2022年1月8日下午16点-17点,每个接口调用量top10的ip地址

原始数据格式

timeinterfaceip时间接口访问IP2021/1/8 15:01:28/api/user/login110.25.3.562021/1/8 15:21:12/api/device/alarm23.21.33.872021/1/8 15:51:34/api/device/record45.76.21.543......统计之后格式

接口访问IP访问次数排名/api/user/login110.25.3.56891/api/device/alarm23.21.33.871231/api/device/record45.76.21.543231............此题作为开放题供大家查阅,后面有空再继续写

附录资料

Hive和MySQL中部分函数的区别

Hive和MySQL常用日期函数

Hive中order by/distribute by/sort by/group by/partition by之间的区别说明

MySQL多表查询时如何将NULL置为0

使用IFNULL("字段", 0)函数即可
Hive中如何处理NULL值和空字符串


我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4