核对发票数据过程
前两天发票逻辑变动,需要去掉part_code重复的经销商数据,具体做法如下:
(1)生成一张去掉重复的经销商表clean_tm_sst
(2)计算发票的逻辑关联这张表
---------------------------漫长的核对过程------------------------------
(1)初步核对:
获取重复的part_code对应的经销商代码,然后到结果表中查询是否筛选成功
(2)核对发票金额是否一致:
由于是两年前的逻辑,核对过程就像是回忆过去经历。
首先从数据库中拉取某家经销商2月份的发票明细数据365条,然后从集群中同样逻辑获取这家经销商2月份的发票明细数据265条,比对发现明细数据是一致的。
select s.*, t.* from tt_einvoice_item_sap t, tt_einvoice_sap s
where t.vbeln=s.vbeln and s.kunag='0000012983' and fkdat >= to_date('2021-02-01','yyyy-mm-dd') and fkdat < to_date('2021-03-01','yyyy-mm-dd')
order by s.fkdat, s.create_date;
然后根据数据库中明细数据(使用EXCEL)计算指标值A,和数据湖的结果数据获得指标值B,对比发现两者相差528元!!
于是根据计算逻辑拉取发票明细数据364条,很明显是我的计算逻辑把其中一条数据过滤掉了,于是对比后找到这条数据,同时展示出筛选条件字段,进一步判断出是order_type <> ‘10721023’ 把这条数据过滤掉的【因为这条数据的order_type is NULL】然鹅hive中为NULL的数据是不参与判断条件的!!!
select
wi.sst_code,
substr(wi.te_fkdat,1,10) date,
wo.order_type,wi.tpm_parttype,wi.te_is_canceled,
wi.tei_order_code,wi.tei_aupos,
wo.d_order_code,wo.d_no,
nvl(wi.tei_netwr,0)
from (select * from asmp.wd_tt_einvoice_item_sap e where e.partition_date ='202102') wi
left join asmp.wd_tt_part_order wo on wi.tei_order_code = wo.d_order_code and wi.tei_aupos = wo.d_no
where wi.sst_code='xxxxxxxx'
进一步挖掘,为什么这条数据order_type is NULL,于是查找这个字段来源表:订单宽表,这条数据是因为没关联上订单宽表数据才出现为NULL的现象,线索转移,生成订单表的宽表是另一个同事负责的,他当时考虑的是当月订单金额,所以关联了当月的订单明细数据,然鹅这笔单子是2020年12月的订单,在2021年2月才生成的发票数据,从发票的业务来看,计算的是当月的发票数据,是因为两个月前的订单所以订单宽表没有关联上订单明细数据,终于找到问题的根源了。如何解决呢?
(1)临时解决方案
修改发票逻辑,不关联订单宽表,直接关联订单表和订单明细表
(2)优化解决方案
方案一的弊端是每天都要重复全量关联订单表和订单明细表,增加集群计算量,方案二是重新设计订单宽表逻辑,订单表关联6个月订单明细表,然后每天刷新数据。
注意事项:
(1)hive比较字符串是不包括NULL,需要根据业务具体情况讨论是否统计NULL的数值
(2)有些表的业务需要刷新多个月数据,这个建立宽表的时候就应该考虑清楚,否则返工会很麻烦
上一篇: Pandas核对两组数据
下一篇: hive数仓、数据中台数据核对的方法