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年,该表的数据如下:
idDayWeek12020-01-0120200122020-01-0220200132020-01-0320200142020-01-0420200152020-01-0520200162020-01-0620200272020-01-0720200282020-01-08202002...................当有这一张周表,而需要查询近N周范围数据的主表由有week字段,例如主表commerce_data是这样的——
idorder_idcustomer_idproduct_idweektotal_amount1ORD2023150011001500120250152ORD20231500210025002202452103ORD20231500310035003202451224ORD2023150041004500420245015..............................这时,如果需要统计指定周和前N周的数据,就可以基于这两张表去实现。
例如,查出2025年第1周往前近4周的数据。
可以基于date_week_table周表计算2025年第1周往前近4周都有哪些周,HIVE SQL如下:
select distinct week from date_week_table where week
页:
[1]