00:00
啊,那接下来我们聊聊克里格house的一个join蚓多表关联啊,就是做一个什么蚯蚓,那蚯蚓呢,我们到底说它不好,为什么不好呢?我们一会来看看啊,那我们首先来准备一些表,为啥要准备一些表呢?我用官方两张表九引不行吗?当然可以了,同学们,但是我的机器可能扛不住啊,所以我要准备一张数据量小一点的表啊。收率量小一点的表来,这张表呢,我是通过官方的VV一来的,我干了什么你看。Create table as select,语法熟悉吧,对吧,就是表结构跟你这张表完全一样,但是我只要了你的1万条啊,我用数据量少一点来交密码啊,我受不了啊,你们受得了的话就直接不用创建小表。好创建好了VR啊,然后呢,我在创建一张join结果表,为啥。
01:05
为啥刚才已经演示过了,如果我交完的数据有100万条,那他正常是把结果返回打印在控制台呀,那是不是就跟刚才一样疯狂的刷刷刷刷刷呀,对吧?那如果我们是把join后的结果insert到一张表里面去,控制台是不是不会打印结果集?对吧,那我下面这张表创建的目的就在于此,就在于此啊。那这张呢,我叫he VR,那么你看我是这么实现的,也是as select,但是你不是应该要个空表吗?V1等于零,这也是咱们在生产上经常用的一种方式,就是hi也好,离线数仓也好,你现在有一张表,想要完全复制它的结构,难道你把它建表语句再拷出来执行一遍吗?如果有100多个字段,看着是不是很长,但是你就可以通过这种方式。
02:05
代星,然后条件永远不成立,一等于零,是不是数据不会进来,但表结构进来。表结构进来的,这是一种取巧的方式啊。那其他的这什么帕迪斯曼,奥德拜。这些这几个设置我是跟官方建表语句一模一样的啊,一模一样的,好,这两张表建好了。那我们来看看第一个用in代替join,这个强烈推荐,因为这样是不是避免走join呢?大家注意,就是join,我先现在跟大家聊一聊他join到底咋做的,他是一个很奇葩的做法,他把表B右表。完全加载到哪里内存大家注意,所有的数据进入到内存里面。
03:05
所有的数据啊,其实大家能想到,万一这张表太大怎么办,那你就报了呗,还能怎么办?然后表A呢,每一条数据都去查一下内存这条数据能不能关联上。就是这么low的实践方式。从而造成他蚯蚓真的是很不好用啊,很不好用,能理解吗?现在好。基于此,能不用蚯蚓实现,我就不要用蚯蚓实现,那有些场景咱们不可以这么来实用in来代替,比如说这个语法。跟这个语法实现的效果是不是一样的,什么意思呢?你看flow这张表,我叫他A,然后呢,根据什么CID进行关联,就下面这个写法嘛,啊,两张表join,然后CID相等。
04:02
那是不是可以替换成?然后我查的是A表的字段。那我是不是可以替换成E呢?对吧,我先用一个子查询把B表的count ID拿到,然后过滤条件,A的ID在B的这个结果机里面就行了呗,对吧,这样比你勾引全表扫描好,你这个最多也就是扫描一列,对吧?来我们来试一试呢。看时间,你看这明显就慢了吧,两秒多多少条,处理了500多万条啊,500多万条。那你看啊。你看我这里是不是用insert into刚才建的结果表啊?你看这样,我控制台打印数据的吗?没有啊没有。那我们再来对比一下刚才另一种,呃,这个是哪张表在右边呢?
05:09
我把这句改造一下。改造成咱们想要的,咱们是不是V1呀。刚才二是小表嘛,我建的小表1万条嘛,我现在先用官方的表,这张表Q这张表,然后呢套ID相等你再看看它执行多久啊,同样的效果。这是一。你说。其实大家已经感受到了吧,是慢多了,这个进度条明显特别特别慢嘛。让他慢慢动呗。对吧,慢的有点过分了啊,然后把这个语句也粘过来吧,让你们自己去跑一下。
06:05
嗯。板栗使用胶印啊。在这里。这个怎么变大写了不好看啊,改一下啊。对。好了,来对比一下效率。为什么说他不擅长灸?你不要作死对吧?不要作死,不要造孽。这个就是咱们能直观最直观感受到一个优化的地方啊,优化的地方这一点要特别注意啊,尤其是谈到house join。确实不太行,对吧,就像你谈到天。那确实不太行。好。
我来说两句