2020-11-19

在这里插入图片描述
核查承影看板和沙箱的数据,请教测试NB,get到了不少新东西,是为记录。
1、dws_ord_route_p_detail_fact_ds,从该表取在2020118完单的正确写法如下
注①:为什么不写ds?因为该表虽然有ds,但是kudu表,是按照用户id分区,不是按照ds分区(hive表按照ds分区)。
注②:完单条件为什么不写cancel_time is null?因为该表从底层表取数时,settlement_time已经包含cancel_time is null条件,因此,该条件可以不写。
注③为什么不取ds=‘20201118’,而是限制settle_time(发送账单时间)在18号?因为该表的ds取的是create_route_time(发单时间),所以要取完单/冒泡/呼叫的话,需要分别限制完单/冒泡/呼叫的时间。

SELECT passenger_id
FROM dws_ord_route_p_detail_fact_ds
WHERE settlement_time > '2020-11-18' 
  AND settlement_time < '2020-11-19' 
2、dm_user_basic_char_dt该表,不是按照ds分区,是按照uuid分区,如果register_city有重复,按照register_time注册时间取最新数据,如下
SELECT passenger_uuid
  ,MAX(register_time)
  ,register_city
FROM dm_user_basic_char_dt
GROUP BY passenger_uuid
  ,register_city

3、提效,substr(register_time)=‘2020-11-18’,这种写法效率慢,因为这样会让每个字段都跑一遍substr,更优的写法是

register_time > '2020-11-18' 
AND register_time < '2020-11-19' 

4、上条写法,为什么不写register_time > =‘2020-11-18’,因为register_time > '2020-11-18’等价于register_time > ‘2020-11-18 00:00:00’

5、dws_ord_route_p_detail_fact_ds,该表有14个乘客id重复,且register_time和source皆为空,目测对常规统计结果无影响。因此在常规代码编辑中不需要考虑该情况

select a1.passenger_uuid,a2.register_time,a2.source
from 
  (SELECT passenger_uuid,count(passenger_uuid) as cishu
  FROM  pub_cockpit_db.dm_user_basic_char_dt
  where ds = '20201119'
  group by passenger_uuid
  ) a1
left join pub_cockpit_db.dm_user_basic_char_dt a2
on a1.passenger_uuid=a2.passenger_uuid
where a1.cishu > 1
and a2.ds = '20201119'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值