今天の踩坑日记

今天上线作业之后发生了错误,这也是特别常见的现象,有时候生产环境没有问题,上线过程中人为操作的失误,导致上线之后各种错误。针对这种问题我把踩过的坑全部记录了下来,以后避免出现这样问题

1.表没有推送生产环境

由于测试通过才能把表推送生产环境,所以这次把一张表忘记了

2.${bdp.system.bizdate}

是业务日期,有别于调度日期,例如在调度日期是2月1日时,业务日期其实是1月31日,在逻辑上取上个月的数据时应该写为

dt>= replace(
    	substr(
            datetrunc(to_date('${bdp.system.bizdate}','yyyymmdd'),'month'),1,10),'-','')
and 
dt<=`${bdp.system.bizdate}`

3.SQL写法问题

之前的错误写法:

--先写框架,再完善框架
select
from()t1 
left join()t2
on t1.store_id=t2.store_id

正确写法:从每一个表入手处理数据,根据每步处理的结果去合并简化代码

--第一步
select 
   store_id
   ,tb_activity_id
   ,sum(COALESCE(share_amt,0))             share_amt
   ,sum(COALESCE(pay_net_gp_amt,0))      pay_net_gp_amt
   ,sum(COALESCE(pay_amt,0))               pay_amt
from rtcdm.fct_b2c_tra_delivery_voucher_pay_sbord_di
where dt <='${bdp.system.bizdate}'  --上月最后1天
and dt >=
replace(substr(datetrunc(to_date('${bdp.system.bizdate}','yyyymmdd'),'month'),1,10),'-','')  --上月1号
group by store_id,tb_activity_id

--第二步
select 
	store_id
	,tb_activity_id
	,sum(COALESCE(share_amt,0))             share_amt
	,sum(COALESCE(pm_amt,0))                pm_amt
	,sum(COALESCE(refund_net_gp_amt,0))     refund_net_gp_amt
from rtcdm.fct_b2c_tra_delivery_voucher_rtn_sbord_di
where dt <='${bdp.system.bizdate}'  --上月最后1天
and dt >=replace(substr(datetrunc(to_date('${bdp.system.bizdate}','yyyymmdd'),'month'),1,10),'-','')  --上月1号
group by store_id,tb_activity_id

--第三步
select
from (--第一步)
full join(--第二步)
ON t1.store_id=t2.store_id
AND t1.tb_activity_id=t2.tb_activity_id

之前的顺序正好相反

4.left join

属性能最后left join的一定不要提前,会造成数据量的增加

5.group by

一定要确定好粒度,有些字段一一对应的时候,粒度没有发生变化,不需要在group by

6.full join

之后的结果是两个表的所有字段,选择相同字段的时候,要用COALESCE

COALESCE(t1.store_id,t2.store_id)

7.聚合函数

sum,count 等聚合函数,会自动忽略null值,所以不用进行null判断

posted @ 2021-02-01 18:04  _backspace  阅读(12)  评论(0)    收藏  举报