基金/证券项目如何进行非交易日数据补全(实战)

一些大数据开发的项目,特别是基金/证券公司的项目,都经常会涉及到交易日与非交易日的概念。

如果要让你对一张交易日跑批的主表,怎么去补全非交易日的数据呢?

在遇到这种情况的时候,我们要去怎么处理?来,实战一下。

一,自然日数据 = 主表【交易日】left join 时间维表【非交/交】

1,理财产品报价历史表(交易日有数据)

有一张理财产品报价历史(dt分区)表:db_edw.prd_fm_quot_his

字段如下:

prd_cd         --(产品代码)

fm_prd_ta_cd   --(产品TA代码)

nvlu          --(产品净值)

fm_prd_type_cd --(产品类型代码)

dt             --(时间分区)

数据如下:(2024-05-24是周五,交易日)

prd_cdfm_prd_ta_cdnvlufm_prd_type_cddt
A0018624791.0172024-05-23
A0018624790.9972024-05-24

这张表因为是在交易日跑数,所以在非交易日(2024-05-26/周六,2024-05-27/周日),是不存在数据的。

那么怎么让这张表在每一个自然日有数据呢??这个是我们要做的。

2,时间维表(自然日)

一般都会有一张时间维度的表:db_cdm.dim_date (时间维表),记录每一天的信息,比如yyyymmdd,是不是交易日,是周几,是今年的第几天,是今年的第几周,是当月的第几天,是当月的第几周,上一个交易日,下一个交易日,等等。

有一张时间维度的表:db_cdm.dim_date (时间维表)

有如下重要字段:

date_id        --自然日(年月日)

trd_day_flag    --交易日标志(1为交易日,0为非交易日)

last_trd_date_id  --上一个交易日

dt     --时间分区

部分数据如下:

date_idtrd_day_flaglast_trd_date_iddt
2024-05-23(周四)12024-05-22-
2024-05-24(周五)12024-05-23-
2024-05-25(周六)02024-05-24-
2024-05-26(周日)02024-05-24-

注意:dt为时间维度表的分区字段,每天一个全量数据。

在实际工作开发中,dt=date_sub(current_date(),1)。

为什么要时间减1,因为今天跑昨天的数据的。

3,处理为:理财产品报价历史表(自然日有数据)

处理规则:当然是让理财产品报价历史表,在非交易日那几天,按照上一个交易日的数据信息来使用。

代码如下:

注释:'${v_start_date}', '${v_end_date}' 是时间参数

注意:trd_day_flag = '1' , 为交易日标志

数据如下:

date_idprd_cdfm_prd_ta_cdnvlufm_prd_type_cddttrd_date
2024-05-23A00186247910172024-05-232024-05-23
2024-05-24A0018624790.9972024-05-242024-05-24
2024-05-25A0018624790.9972024-05-242024-05-24
2024-05-26A0018624790.9972024-05-242024-05-24

上图蓝色字段为时间维表的字段。

是通过最后两列来进行关联的。

这样子就把周末两天的非交易日数据也给获取到了。

理财产品报价历史表的dt(交易日),和时间维表(处理之后)的trd_date(交易日),关联会数据发散为所有自然日。

二,自然日数据 = 交易日数据 union all 非交易日数据

当然,如果想要得到全量的自然日的数据,可以和交易日的数据 union all 一把。

4,非交易日数据

注意:trd_day_flag = '0' , 非交易日标志

使用inner join关联。

5,交易日数据 union all 非交易日数据

这样子就得到了全部的自然日的数据了 。

=====================================

当然,推荐使用第一种方法,因为它更加简洁,利用数据发散得到全部自然日的数据。在跑数的时候效率更加高,是第二种方法的优化!!!这样子的写法让你的领导刮目相看,眼前为之一亮。也是一个高级程序员的必备素质。

知识点不难,但都是经验之谈,以后肯定能用上。欢迎一键三连。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不被定义喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值