我正在尝试使用表中的牵引日期来提取特定数量(8)的季度。日期格式为YYYYMMDD
我可以根据当前月份编写一个选择使用案例来显示特定季度。
我可以使用trunc
函数找到月初,但无法找到过去8个季度数据的逻辑
答案 0 :(得分:0)
首先将日期转换为Hive格式。
然后使用DENSE_RANK()
按季度对行进行编号(按年份desc和季度desc排序),然后按rnk< = 8进行过滤:
select * from
(
--calculate DENSE_RANK
select s.*, DENSE_RANK() over(order by year(your_date) desc, quarter(your_date) desc) as rnk
from
(
--convert date to YYYY-MM-DD format
select t.*, from_unixtime(unix_timestamp(),'yyyyMMdd') your_date
from table_name t
--Also restrict your dataset to select only few last years here
--because you do not need to scan all data
--so add WHERE clause here
)s
)s where rnk<=8;
请参阅此处的功能手册:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
您可以在了解数据以及如何对表进行分区的情况下优化此查询,从而限制数据集。如果您需要查询每个密钥的最后8个季度,还要向partition by
添加over()
子句。