怎么做纪念网站,2019年云南建设银行招聘网站,网站后台的seo功能,wordpress的简单应用1、条件过滤
left join 中 on 后面加条件 where 和 and 的区别
1、 on条件是在生成临时表时使用的条件#xff0c;它不管and中的条件是否为真#xff0c;都会保留左边表中的全部记录。2、where条件是在临时表生成好后#xff0c;再对临时表进行过滤的条件。这时已经没有le…1、条件过滤
left join 中 on 后面加条件 where 和 and 的区别
1、 on条件是在生成临时表时使用的条件它不管and中的条件是否为真都会保留左边表中的全部记录。2、where条件是在临时表生成好后再对临时表进行过滤的条件。这时已经没有left join的含义必须返回左表的记录了条件不为真的就全部过滤掉。
条件加在where可能会导致主表/左表的最终记录数变少的情况发生。
举个例子 有表a和表b
表a
idname1a2b3c4d
表b
idname1A2B
1、on 后面条件用and 不管条件是否成立 都会把左表的数据全部展示
select * from a left join b on a.id b.id and b.name B;此时会有4条记录
idnameid2name21a2b2B3c4d
2、on 后面条件用where 在left join 生成的表上在做筛选这时会把 where中不成立的筛选掉
select * from a left join b on a.id b.id where b.name B;此时只有1条记录
idnameid2name22b2B
2、指定分区
结论指定分区时优先采用写法3即 partition 的写法。
1、left join xxx::xxx on 分区字段 其他表的分区字段 where 其他表的分区字段 2023110700 2、left join xxx::xxx on 分区字段 2023110700 3、left join xxx::xxx partition(p_2023110700)t 4、left join (select xxx from xxx::xxx where 分区字段 2023110700 on xxx 5、left join (select xxx from xxx::xxx partition(p_2023110700)t on xxx
写法1 是最慢的因为join两边的表都没有提前过滤分区所以执行时大概率导致全表扫描。 写法23 一般情况下差异不大写法3是最规范的写法。 写法3必定是指定分区写法2大概率会优化为指定分区小概率全表扫描。 写法45是Hive的标准写法但是一般场景下没有子查询的必要效果上与写法2,3相同。
3、数据倾斜
1、优化大小表join采用map join的方式优化
使用map join的必要条件 a. 参与连接的小表的行数以不超过2万条为宜。 b.连接类型是inner join、right outer join小表不能是右表、left outer join小表不能是左表、left semi join。
使用方法示例 INSERT OVERWRITE TABLE xxxSELECT /* MAPJOIN(aa) */ aa.pageid, u.age FROM page_view pvJOIN user uON (aa.userid u.userid);注当大表存在数据倾斜时如果小表符合map join的要求使用map join会极大加速计算。/* MAPJOIN(pv) */
参考资料
2、避免大小表join 再单独清洗一张dwd设定保留分区的个数构造一张特定大小的总表进行全表扫描再过滤字段。