Hive 在配置单元上分组不同的时间范围
我正在尝试执行一个资源效率很高的查询,并给出以下结果: 身份证件 时期 咔哒声 162 60天 123 162 90天 200 7162 60天 127 7162 90天 6718Hive 在配置单元上分组不同的时间范围,hive,hiveql,Hive,Hiveql,我正在尝试执行一个资源效率很高的查询,并给出以下结果: 身份证件 时期 咔哒声 162 60天 123 162 90天 200 7162 60天 127 7162 90天 6718 您可以使用case-when或if和数据复制轻松地完成这项工作。 因此,首先使用rs子查询获取基础数据,在这里计算90d和60d存储桶。 然后,如果数据同时为90d和60d,则生成两行,如果数据仅为90d,则生成一行。 性能方面,它应该比同一张表上的CTE更好,但请彻底测试它 SELECT id,
您可以使用case-when或if和数据复制轻松地完成这项工作。 因此,首先使用rs子查询获取基础数据,在这里计算90d和60d存储桶。
然后,如果数据同时为90d和60d,则生成两行,如果数据仅为90d,则生成一行。
性能方面,它应该比同一张表上的CTE更好,但请彻底测试它
SELECT id,
CASE
WHEN dummy=0 THEN p1
WHEN dummy =1 THEN p2
ELSE NULL
END AS period,
clicks
FROM
(SELECT id,
CASE
WHEN `date` BETWEEN date_sub(current_date(), 90) AND current_date() THEN '90d'
END p1,
CASE
WHEN `date` BETWEEN date_sub(current_date(), 60) AND current_date() THEN '60d'
END p2,
SUM(clicks) AS clicks
FROM etl.t99
WHERE `date` BETWEEN date_sub(current_date(), 90) AND current_date()
GROUP BY CASE
WHEN `date` BETWEEN date_sub(current_date(), 90) AND current_date() THEN '90d'
END ,
CASE
WHEN `date` BETWEEN date_sub(current_date(), 60) AND current_date() THEN '60d'
END ,
id) rs,
(SELECT 0 dummy
UNION SELECT 1 dummy) dummy_table -- This will generate two dummy records
WHERE CASE
WHEN p1 IS NOT NULL
AND p2 IS NOT NULL
AND dummy in (0,
1) THEN 1 -- This will generate 90d and 60d
WHEN p1 IS NOT NULL
AND p2 IS NULL
AND dummy =0 THEN 1 -- This will generate only 90
ELSE 0
END = 1
样本数据和结果显示在下图中。