hive日期维表 上周五到本周四为一周

博客介绍了如何在Hive的日期维表中添加一列,以显示从上周五到本周四的时间段,作为一周的定义。内容主要涉及Hive和SQL操作。

需求:
在日期维表中添加一列,周,上周五到本周四代表一周
直接上sql:


select  aa.dates,substr(dates,0,4) as years,substr(dates,0,7) as months,bb.weekss as weeks from 
(
select dates, concat(substr(date
Hive SQL 中实现按“上周五到本周五”进行数据聚合,通常需要以下几个步骤: 1. **确定日期范围**:根据当前日期计算出最近的上周五和本周五的具体日期。 2. **筛选数据**:将中符合该时间范围的数据筛选出来。 3. **分组与聚合**:按照周度(即每七天)对数据进行聚合操作。 ### 1. 计算上周五和本周五的日期 Hive 提供了 `date_sub`、`next_day` 等函数用于日期计算。例如,可以通过如下方式获取当前日期所在的本周五和上周五: ```sql -- 获取本周五 select date_sub(next_day(current_date, 'FRIDAY'), 7) as last_friday; -- 获取本周五 select next_day(date_sub(current_date, 7), 'FRIDAY') as last_friday; ``` 如果当前日期是 `2025-04-05`(假设为星期六),则: - 上周五为 `2025-03-28` - 本周五为 `2025-04-04` ### 2. 筛选并聚合数据 假设存在一张日志 `log_table`,其中包含字段 `log_date`(格式为 `yyyy-MM-dd`)和 `event_count`,需要统计从上周五到本周五之间的事件总数: ```sql with date_range as ( select date_sub(next_day(current_date, 'FRIDAY'), 7) as start_date, next_day(date_sub(current_date, 1), 'FRIDAY') as end_date ) select sum(event_count) as total_events from log_table join date_range where log_table.log_date >= date_range.start_date and log_table.log_date <= date_range.end_date; ``` ### 3. 按周动态分组 若需按多周连续统计(如过去 N 周的数据),可以结合 `lateral view` 和 `explode` 函数生成时间区间,并按每个周期进行分组统计。 ```sql with weekly_periods as ( select posexplode(split(space(4), ' ')) as (week_offset, dummy) -- 过去5周 ), date_bounds as ( select week_offset, date_sub(next_day(current_date, 'FRIDAY'), (week_offset + 1)*7) as start_date, date_sub(next_day(current_date, 'FRIDAY'), week_offset*7) as end_date from weekly_periods ) select db.week_offset, sum(lt.event_count) as weekly_total from log_table lt join date_bounds db on lt.log_date >= db.start_date and lt.log_date < db.end_date group by db.week_offset order by db.week_offset; ``` ### 4. 使用 `date_format` 或 `to_date` 转换时间戳 若原始数据的时间字段为时间戳格式(如 `BIGINT` 类型的毫秒级时间戳),可使用 `from_unixtime` 配合 `unix_timestamp` 进行转换: ```sql select from_unixtime(unix_timestamp('2020-06-06 11:11:11', 'yyyy-MM-dd HH:mm:ss'), 'yyyy-MM') as formatted_date; ``` 上述方法可确保数据按“上周五到本周五”的时间窗口进行聚合,适用于日志分析、用户行为统计等场景[^4]。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值