我的表每天运行并在每天生成一个名为date的分区cloumn
例如:我的查询生成日期
2018-01-01
2018-01-02
2018-01-03
2018-01-06
2018-01-08
缺少 2018-01-05 & 2018-01-07
个日期。有没有办法找出那些丢失的日期?
答案 0 :(得分:1)
下面的查询将1)创建一个临时表,其中包含从开始分区日期到最新分区日期的连续日期.2)执行左连接并查看缺少哪些分区日期(partition_dt为null)。希望这可以帮助。感谢。
create table partition_dtes as
with cal_date as (select min(partition_dt) as min_dt, max(partition_dt) as max_dt from mytable)
select date_add(t.min_dt, pe.idx) as series_dte
from cal_date t
lateral view
posexplode(split(space(datediff(t.max_dt,t.min_dt)),' ')) pe as idx, dte;
Result:
2018-01-01
2018-01-02
2018-01-03
2018-01-04
2018-01-05
2018-01-06
2018-01-07
2018-01-08
select distinct dte.series_dte
from partition_dtes dte
left join mytable tbl
on dte.series_dte=tbl.partition_dt
where tbl.partition_dt is null
order by dte.series_dte;
Result:
2018-01-04
2018-01-05
2018-01-07