如何在配置单元的两个日期之间使用派生季度生成多行?

ztmd8pv5  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(246)

我在配置单元表中有一行有开始日期和结束日期。我需要找出开始日期和结束日期之间的所有季度,并根据季度数和衍生期间列将行拆分为多行。
有没有办法使用配置单元查询来实现这一点?

> Source Table:- 
>    Pid    Start_Date  End_Date 
>  Act01    2011-01-01  2012-12-31
> 
> Expected Result:- 
>   Pid  Start_Date End_Date   Period 
> Act01 2011-01-01  2011-03-31 2011Q1 
> Act01 2011-04-01  2011-06-30 2011Q2
> Act01 2011-07-01  2011-09-30 2011Q3 
> Act01 2011-10-01  2011-12-31 2011Q4
> Act01 2012-01-01  2012-03-31 2012Q1 
> Act01 2012-04-01  2012-06-30 2012Q2
> Act01 2012-07-01  2012-09-30 2012Q3 
> Act01 2012-10-01  2012-12-31 2012Q4

来源和预期结果

jhkqcmku

jhkqcmku1#

spark 2.4.3序列(开始、停止、步骤)-从开始到停止(含)生成元素数组,并逐步递增。返回元素的类型与参数表达式的类型相同。

scala> var df = Seq(("Act01","2011-01-01","2012-12-31")).toDF("pid","sdate","edate")
scala> df.registerTempTable("temp")

scala> var df3 = sql("select *,last_day(CAST(start_date AS DATE) + INTERVAL 2 months) end_date,concat(year(start_date),'Q',cast(quarter(start_date) as string)) as period  from (SELECT pid,explode(sequence(to_date(sdate), to_date(edate), interval 3 month)) as start_date from temp)t")

scala> df3.show()
+-----+----------+----------+------+
|  pid|start_date|  end_date|period|
+-----+----------+----------+------+
|Act01|2011-01-01|2011-03-31|2011Q1|
|Act01|2011-04-01|2011-06-30|2011Q2|
|Act01|2011-07-01|2011-09-30|2011Q3|
|Act01|2011-10-01|2011-12-31|2011Q4|
|Act01|2012-01-01|2012-03-31|2012Q1|
|Act01|2012-04-01|2012-06-30|2012Q2|
|Act01|2012-07-01|2012-09-30|2012Q3|
|Act01|2012-10-01|2012-12-31|2012Q4|
+-----+----------+----------+------+

我想这就是你想要的结果。

相关问题