在DWD层表中,有如下数据。用户id,商品id,当日用户浏览该商品次数,天分区。请用sql语言计算指标近180天用户浏览该商品次数。 注意:每天的用户浏览数据超过百万条。且该指标需要每天计算。 提示:考虑定时调度,每天动态累计。CREATE TABLE dwd_user_day_num_visits ( user_id STRING COMMENT '用户ID', product_id STRING COMMENT '商品ID', day_num_visits_dy INT COMMENT '当日用户浏览该商品次数' ) COMMENT '用户浏览商品信息' PARTITIONED BY (pt_d STRING COMMENT '分区日期') ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE ; CREATE TABLE dwd_user_day_num_visits_180dy ( user_id STRING COMMENT '用户ID', product_id STRING COMMENT '商品ID', day_num_visits_180dy INT COMMENT '近180天用户浏览该商品次数' ) COMMENT '近180天用户浏览该商品次数' PARTITIONED BY (pt_d STRING COMMENT '分区日期') ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE ;
时间: 2024-04-09 08:28:58 浏览: 187
根据您提供的表结构和要求,可以使用以下SQL语句来计算近180天用户浏览该商品的次数:
```sql
INSERT OVERWRITE TABLE dwd_user_day_num_visits_180dy PARTITION (pt_d = '{当前日期}')
SELECT
a.user_id,
a.product_id,
SUM(b.day_num_visits_dy) AS day_num_visits_180dy
FROM
(SELECT user_id, product_id FROM dwd_user_day_num_visits WHERE pt_d >= DATE_SUB('{当前日期}', 180)) a
JOIN
dwd_user_day_num_visits b ON a.user_id = b.user_id AND a.product_id = b.product_id AND b.pt_d = '{当前日期}'
GROUP BY
a.user_id,
a.product_id;
```
上述SQL语句中,我们首先通过子查询筛选出近180天内有浏览记录的用户和商品。然后与当天的浏览数据进行连接,并按照用户ID和商品ID进行分组,计算近180天的浏览次数。最后将结果插入到dwd_user_day_num_visits_180dy表的对应分区中。
请注意替换SQL语句中的"{当前日期}"为实际的日期值,以及根据您的实际表名和字段名进行调整。此外,建议将该SQL语句设定为每天定时执行,以实现每天计算该指标并更新结果表。
阅读全文