Hive SQL实现近N周的数据统计查询
文/朱季谦
先前遇到过一个需求,需要基于HIVE统计近N周范围的数据,例如,统计近7周范围的数据指标。
需要用HIVE SQL去实现该功能,而HIVE SQL并没有PostgreSQL那样例如通过函数to_char((to_date('202550', 'YYYWW') - INTERVAL '5 weeks'), 'yyyyww'))就可以实现202550和往前5周的202545周的查询(这里的50和45分别表示2025年的50周和45周)。
我当时通过百度和DeepSeek都没有找到合适的答案,还是思考了好几天才想明白怎么解决。
既然HIVE SQL没有函数可以直接实现取指定周与近N周的条件范围查询,是否可以有其他方式呢?
答案是肯定的。
我当时是通过额外建一个时间表,该表有天以及天对应的所在周,可以直接通过代码生成这样一张表date_week_table,直接 从2020年一直自动映射到2030年,该表的数据如下:
| id | Day | Week |
|---|---|---|
| 1 | 2020-01-01 | 202001 |
| 2 | 2020-01-02 | 202001 |
| 3 | 2020-01-03 | 202001 |
| 4 | 2020-01-04 | 202001 |
| 5 | 2020-01-05 | 202001 |
| 6 | 2020-01-06 | 202002 |
| 7 | 2020-01-07 | 202002 |
| 8 | 2020-01-08 | 202002 |
| ....... | ...... | ...... |
当有这一张周表,而需要查询近N周范围数据的主表由有week字段,例如主表commerce_data是这样的——
| id | order_id | customer_id | product_id | week | total_amount |
|---|---|---|---|---|---|
| 1 | ORD202315001 | 1001 | 5001 | 202501 | 5 |
| 2 | ORD202315002 | 1002 | 5002 | 202452 | 10 |
| 3 | ORD202315003 | 1003 | 5003 | 202451 | 22 |
| 4 | ORD202315004 | 1004 | 5004 | 202450 | 1 |
| 5 | ...... | ...... | ...... | ...... | ...... |
这时,如果需要统计指定周和前N周的数据,就可以基于这两张表去实现。
例如,查出2025年第1周往前近4周的数据。
可以基于date_week_table周表计算2025年第1周往前近4周都有哪些周,HIVE SQL如下:
select distinct week from date_week_table where week <= '202501' order by week desc limit 3
然后再基于commerce_data主表计算在2025年第1周往前近4周的数据——
select
sum(total_amount)
from commerce_data
where week in(select distinct week from date_week_table where week <= '202501' order by week desc limit 3)
group by order_id
这样,就可以实现查询出指定周及指定周近N周的HIVE SQL查询了。
当然,也有童鞋可能会说,既然只是查询近N周范围,是否可以直接使用指定周,再减去N来差呢?
这里会有一个问题,2025年第一周,即202501,往前两周,分别是202452和202451,如果用指定周202501直接减2,得到的并不是202451。
以上,只是我个人的一个思路,如果还有其他基于HIVE SQL来计算指定周及近N周的计算,可以留言区一块分享讨论。
Hive SQL实现近N周的数据统计查询的更多相关文章
- mysql按年度、季度、月度、周、日统计查询的sql语句
本文介绍一些mysql中用于查询的sql语句,包括按年度.季度.月度.周.日统计查询等,有需要的朋友,可以参考下. 一.年度查询 查询 本年度的数据 SELECT * FROM blog_arti ...
- sql处理百万级以上的数据提高查询速度的方法
原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...
- 《转》sql处理百万级以上的数据提高查询速度的方法
处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考 ...
- 009-Hadoop Hive sql语法详解4-DQL 操作:数据查询SQL-select、join、union、udtf
一.基本的Select 操作 语法SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE whe ...
- sql 数据库中只靠一个数据,查询到所在表和列名
有时候我们想通过一个值知道这个值来自数据库的哪个表以及哪个字段,在网上搜了一下,找到一个比较好的方法,通过一个存储过程实现的.只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名. 前提是要将 ...
- [MySQL] 按年度、季度、月度、周、日统计查询
该死的mysql没有提供unix时间戳的专门处理函数,所以,如果遇到时间分组,而你用的又是整型unix时间戳,则只有转化为mysql的其他日期类型! FROM_UNIXTIM()将unix时间戳转 ...
- Postgre Sql获取最近一周、一月、一年日期函数
使用Postgre Sql获取近一周.一年.一月等系统函数调用如下,使用方面相对于Ms Sql server 容易了许多. --当前时间 select now(); --current_timesta ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- SQL SERVER 月、季、年统计与常用查询语句汇总
一.SQL SERVER 月.季.年统计查询 --本天 SELECT *FROM dbo.TableName WHERE DATEDIFF(DAY,TimeField,getdate())= 0; - ...
- 【甘道夫】使用HIVE SQL实现推荐系统数据补全
需求 在推荐系统场景中,假设基础行为数据太少,或者过于稀疏,通过推荐算法计算得出的推荐结果非常可能达不到要求的数量. 比方,希望针对每一个item或user推荐20个item,可是通过计算仅仅得到8个 ...
随机推荐
- python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序
03 如何进行排序 3-1准备工作: 因为要排序,所以需要随机多谢数据,model见后文.也需要random进行随机 from model import User, Engine from sqlal ...
- CDS标准视图:日期迁移视图 I_ShiftedCalendarDate
视图名称:I_ShiftedCalendarDate 视图类型:带参数的视图 时间期间偏移量单位(P_TimePeriodOffsetUnit): D代表天 W代表周 M代表月 Q代表季 Y代表年 期 ...
- postman环境设置以及参数传递
通常一个公司项目有不同的环境(开发环境,测试环境,上线环境),在做测试时候,有可能会遇到接口改变之类的,postman保存了很多接口,想要再测试局需要多次修改域名或者端口,这个时候就需要配置环境 1. ...
- SM9-加解密
算法过程 程序实现 ///************************************************************************ // File name: ...
- 2025春秋杯DAY2DAY3部分wp
2025春秋杯DAY2DAY3部分wp DAY2 WEB easy_ser 源码如下 <?php //error_reporting(0); function PassWAF1($data){ ...
- 0415-File类和FileFilter接口
package demoFile; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; imp ...
- NET中三种主机简单理解
在NET中有三个不同的主机: .NET WebApplication 主机,也称为最小主机. 这是.NET 6中的一个新特性,旨在提供最小的启动时间和内存消耗.最小主机只包括.NET运行时的最基本组件 ...
- D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> off
D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> ...
- xbox商店访问、下载速度慢,如何提升下载速度?
Xbox下载速度慢可能是由于多种原因,例如网络连接问题.微软服务器问题等.以下是一些可以尝试的方法来提升Xbox的下载速度: 更改网络设置:以WIN11举例:鼠标右键点电脑桌面右下角的网络图标,选择& ...
- Linux - centos6.6不使用ssh如何在服务器之间传输文件?
根据上一篇的设定,如果升级openssh失败之后,又无法使用ssh,该怎么传输文件呢? 可以使用busybox进行文件传输,首先需要准备两台centos6.6服务器:ctos66-01和ctos66- ...