使用HiveQL从特定日期开始的季度数

时间:2017-06-30 05:33:17

标签: hiveql

我正在尝试使用表中的牵引日期来提取特定数量(8)的季度。日期格式为YYYYMMDD

我可以根据当前月份编写一个选择使用案例来显示特定季度。

我可以使用trunc函数找到月初,但无法找到过去8个季度数据的逻辑

1 个答案:

答案 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()子句。