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

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