Learning Notes 2022/10/13 DAY2

一、Work Summary

今日熟悉QUICKBI,已经看完文档,熟悉了基本操作,坐等实战。数据库方面,熟悉了大概20张表,大部分跟主要业务无关,在熟悉业务方面要主次分明,不重要的可以日后再熟悉。

二、Individual learning

1.个人学习这块,首先学习了Maxcompute的分区剪裁失效的场景。

1)自定义函数导致分区剪裁失效

当分区剪裁的条件中使用了用户自定义函数(或者部分内建函数)时,分区剪裁失效。所以,对于分区值的限定,如果使用了非常规函数,建议使用Explain命令查看执行计划,确定分区剪裁是否生效。

explain
select ...
from xxxxx_base2_brd_ind_cw
where ds = concat(SPLIT_PART(bi_week_dim(' ${bdp.system.bizdate}'), ',', 1), SPLIT_PART(bi_week_dim(' ${bdp.system.bizdate}'), ',', 2))

2)使用JOIN时分区剪裁失效

那么这种情况又分为两种:

第一,如果分区剪裁条件放在where字句中,则分区剪裁会生效;

第二,如果分区剪裁条件放在ON字句中,则从表的分区剪裁会生效,主表则不会生效。

条件放在ON字句中:

set odps.sql.allow.fullscan=true;
explain
select a.seller_id
    ,a.pay_ord_pbt_1d_001
from xxxxx_trd_slr_ord_1d a
left outer join
     xxxxx_seller b
on a.seller_id=b.user_id
and a.ds='20150801'
and b.ds='20150801';

由上图可见,左表进行了全表扫描,只有右表的分区裁剪有效果。 

条件放在WHERE字句中:

set odps.sql.allow.fullscan=true;
explain
select a.seller_id
    ,a.pay_ord_pbt_1d_001
from xxxxx_trd_slr_ord_1d a
left outer join
    xxxxx_seller b
on a.seller_id=b.user_id
where a.ds='20150801'
and b.ds='20150801';

 由上图可见,两张表的分区裁剪都有效果。

注意:

分区剪裁如果失效影响较大,且不容易发现。因此,建议在代码提交时关注分区剪裁失效问题。

自定义函数中使用分区剪裁时,需要修改类或者在SQL语句前设置

set odps.sql.udf.ppr.deterministic = true;。

2.学习到一个关于SQL查询效率的注意事项(where过滤时)

1)避免函数包裹

where过滤字段被包裹在函数里是无法使用索引的,使查询效率极大降低。

2)尽量避免用like或者中文产品名称取数

where过滤时,like的效率一般偏低,数量级别越大越明显

另取数时,尽量用产品ID,而非用产品名称,因为名称会变,但是产品ID基本不会变。

总结:今天学了东西,但是总感觉心急,实时想学,kafka想学,用户画像想学,殊不知没学会走就想跑,这只适用于天才,普通人这么学容易摔跟头,踏踏实实,从易到难,一步一步地学习,攻克难关,才是适合我的学习方式,不要东一榔头,西一棒子,熊瞎子掰玉米,到头来什么也没学到。

PS:每天下班回家看两节DATAWORK课程。

                                                                                                                                                          

There is no royal road to size, there is no end to learning work boat.
欢迎各位朋友指导、交流、评论!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值