00:00
呃,咱们说一个什么事呢?我先给大家演示一个现象,先演示现象,然后呢,咱们再说这个具体的解决方案啊,来大家一起看啊,看咱们这有一个什么现象,来我现在执行一个select啊,Select什么呢?Select星,然后呢,From啊随便从咱们这个呃,Ods层咱们查一下啊ods logo啊,这个应该能看懂吧?啊这是不是从ods把那个这张表里所有数据查出来呀,对不对,那现在我执行一个这个回车啊,呃,这个CTRL,然后enter走。啊,如果说大家使用的是那个黑窗口,还有客户端呢,那这个所有数据查出来之后呢,他这会打印一一行日志啊,就是说多少多少行数据被查出来的,它会有一个行数对吧,有总行数,但是在咱们这得怎么看啊,得这么看。我显示所有啊。OK,那这块呢,就会显示一个这样的,呃,总行数对不对,一共多少行啊,咱们这1721行对不对,那现在呢,我把这个这个图啊,咱们截图为正啊,截个为正我放一下啊,1720啊,然后呢,这时候我们再换一个查的这个方式啊,这如果只查函数like看得清from o s logg这个没没问题吧,那理论上这个结果是不是应该跟它是一样的呀,对不对,那这时候咱们看一下是不是一样的啊走。
01:20
啊,当然这个呢,它可能需要时间长一点,因为这个是不是需要去走这个计算引擎了呀,啊,那这个咱们啊,我之前呃,这个SPA的绘画还没有启动起来,咱们得等一会儿啊,啊等他齐起来,然后咱们看一下结果。刚才是1720啊,看一下这次是多少。大家稍微等一下啊。哎,已经开始了。大家可以猜一猜啊,这个结果会不一样。要是一样的,一样的就打脸了,这大家看一下是不是感觉比较奇怪,这是多少,是1000啊,721啊,再对比一下,那很显然这个是不是差一个呀,对不对,那这里边儿之所以能差,那肯定是有问题的啊,肯定有问题的。
02:11
啊,大家可以自己凭自己的直觉,可以先猜测一下,你说这块可能是哪出了问题。为什么我来星from这张表我查了是1720,那我看的星一下呢?哎,结果多了一条。哎,可以凭直觉猜一下啊。嗯,为啥这是。为啥呀?其实是因为这个问题,我给大家说一下啊,这里边呢,之所以导致刚才咱们那个现象,是由于咱们那个ods log里边啊,咱们那个表里是不是拉字罗文件呀,那个文件咱是不是给它建索引了呀,是由于那个索引导致的。啊,你不信你把那个索引删了,你就会发现那这两种查询方式那都是一样的,都是1720。
03:00
啊,那他之所以你谁来看星的时候啊,它多了一条数据,那这这里边是怎么导致的,给大家解释一下啊。是这样的,在你执行select星啊,Select星from某一张表的时候,这个走计算引擎吗?不走计算引擎对吧,如果have在have当中啊,去查看数据,如果说不走计算引擎啊,那你去select from这张表,那你读某一张表是不是肯定会用一个音字呀,对吧,那用的是谁呢?啊,用的就是你在建表的时候所指明的input form,所以说我们在select星的时候啊,你说它使用的那个input就是谁呀。是不是就是咱们在建表的时候,那我们找一下啊,O DS log ctrl f fods log,哎,咱们这可以直接点过去啊,点好,那见表的时候,咱是不是指定就是它啊,也就谁来的星第一种查询方式,我使用的input就是它一点问题没有,那所以说那它是不是专门用来读拉泽罗文件的呀,那拉多罗的索引文件,它是不是肯定能够正确的识别。
04:07
对不对,所以能正确识别,它就不会把那个索引文件当成数据文件,它知道这是索引,索引它就不会当成数据了,那第二种方式,我们select count星from这张表,那这时候它是不是会走计算引擎,对不对?那走计算引擎呢?给大家说一下,我们在have当中去查数据,走计算引擎,那我这个数据它的读取是一个什么样的过程啊,如果说我们在have当中走计算引擎去读数据了,那我们并不是说直接你那个map啊,并不是说你那个map上来直接就是谁,直接就是你这个。In,麦的并不是它啊,那上来是谁呢?上来之后呢,咱们have会先有一步这个处理啊,Have当中有一个这样的参数啊,什么参数呢,来就叫做have点。咱们可以再来一下啊,叫做have.input.for might啊咱们have当中呢,有一个这样的参数啊,那这个参数呢,实际上是我们,呃,在某一张表当中去读数据,然后走计算引擎的时候啊,它要做的第一件事就是先经过这个input啊,那这个input呢,它的这个默认值呢,是哪个,咱们可以看一下默认值是什么呀,默认值是combine have input,那这个普麦大家应该不陌生,它能够实现什么样的效果呀?
05:31
它是不是能够在相当于什么,在咱们真正开启这个mapdu计算之前,先将咱们的表当中的小文件是不是先给你做一个合并啊,对不对,那这样一来能够有效的避免我们后续啊,这个每个map只能获取一小点点的这个文件,是不是能避免这种现象啊,对不对?因为假如说这张表当中我有很多小文件,那按照我们MAP6默认的分片方式,是不是一个文件一个map,一个文件一个map呀,那这个肯定会影响map性能,所以这个command它能做到的一个效果是在你真正跑mmr之前,先将你的小文件做一个合并啊,那这样一来就能够避免刚才咱们说的一个现象,哎,这是这个它的作用。
06:10
啊,OK,那也就是说我们实际上啊,会先经历这一步,经历这一步之后呢,然后我真正去跑my producedu的时候,他再再再怎么办啊,真正旁再怎么办,是不是在使用咱们在建表的时候指明的那个input format呀,也在这儿呢,也就是那个拉泽罗对不对,是这样的啊,然后在这呢,我们相当于什么应该是这样的啊,我们使用可have in form之后呢,它相当于把咱们那个索引文件。跟那个数据文件呀,它是不是相当于给它合并了呀,对不对,那后边我那个拉泽罗姆麦就就怎么样了。呃,对,它就相当于没识别不了那个索引文件了啊,识别不了索引文件,识别不了索引文件,那这样一来。我们我们是不是就会把那个索引文件也当成数据啊,对不对,也当数据了,所以说是不是就是多了一条啊,啊就多了一条啊,是这么回事啊,当然呢,这个多一条不多一条,其实对咱们这儿来说,对咱们这个数据结果来说,其实无所谓,为啥你看啊,我们这儿是不是有这个过滤条件。
07:14
对不对,那你如果说把所有文件也当成咱们的数据文件,是不是你get一下一下它就现原形了呀,那你获取出来的是不是肯定是no,他最终拿出这个结果,其实并没有影响,并没有影响。啊,但是这个不是重要的,这个最主要的问题,最主要的问题是什么呀。我们这个数据结果虽然是没错的,但这里面它不是最重要的问题,最重要问题应该是啥?最重要的问题是不是应该是咱们那个拉佐罗索引文件根本就没有生效啊。是不是那个拉,所以相当于失效了呀,失效之后,那我们是不是就又相当于不能切片了,对不对,这才是这个啊,最重要的一个问题啊,最严重的一个问题啊,假如说我这儿呢,有一个很大的拉多罗文件,结果你建锁眼了,锁眼之后结果怎么样,给你合并了,完了之后你这儿相当于没有了,没用了,那这样一来的话呢,那那就肯定是不行了啊,那肯定不行了啊,那所以说那个咱们这儿这个问题呢,虽然结果不影响,但是我们还是要解决它啊,得保证它能切片才行,那怎么解决呢?
08:16
怎么解决啊,大家说既然这个问题出现的这个原因是什么,是由它导致的对不对,那我们是不是就不让它进行合并了呀,对不对,那怎么设置呢?哎,我们这个音input其实一共有两个,一共有两个啊一个叫什么。一个是我们刚才大家看到的那个。Combine have还有一个什么呀,就是直接就是have,这个呢是不会进行小文节合并的,那所以说咱们把它设成这种,哎,那就没事了,咱们试一下啊,CTRLC,然后呢,我把这个拿过来啊,放在这。来,那这时候呢,我们执行一下这个参数啊,来走你。好,已经设置完毕了,对吧,那完毕之后呢,我们再把刚才咱们做的那个测试呢,在这里做一遍啊,那刚才我们是不是执行了一个来来在这边啊like啊看得清。
09:09
COUNT。啊,Unt?啊count,然后星啊,然后的from audiencelo啊,那这时候咱们再直接走你执行。啊,看下这个结果啊,这次如果正确的话,应该是1720对吧?那你看这次是不是就能够正常识别拉多罗文件索引文件,然后这个结果就跟刚才是一样的了吧?啊,就不是1721了啊是这样的啊,那所以这时候呢,我们大家需要呃注意一个事啊,就是一会咱们再把这个circle写到脚本之中的时候,那咱们需要怎么办?是不是需要在咱们脚本的这个circle前边得set一个参数啊对不对,把刚才咱们呃设的那个参数放在这个脚本前边啊就行了,这是大家呢需要去注意的一个问题啊好,那我把这个视频录一下。
我来说两句