00:00
好,那接下来呢,是分组开窗去和。啊,那如果不开窗做聚合这个东西呢,就比较简单,咱们可以先把这个总体上的逻辑来写一下,对吧?那。先不考虑开窗的问题,对吧,那就是word这个呢是can。心。比如说我叫CT from这张表呢,咱们应该叫table,对吧。加好go back。Word如果不考虑开窗,咱们这个需求是不是就这样子做一个词频统计嘛,对吧,把你切分后的这个单词叫word对吧,把它呢做一个what count,那就是按照它分组求count心就搞定了,对吧?但是呢,我们这个地方不光要分组聚合,还得开窗,那窗口我们得去找一找,这个在S里边咱们应该。
01:02
怎么写?对吧,啊,咱怎么写啊,好,那在我们的circle里边对吧,Queriess啊,这里边就有,诶它有一个window agg。Agggggg对吧,哎,窗口的聚合啊点开。点开好以后呢,那其实它里边呢,有两种不同的写法啊,但是呢,我给大家讲还是讲你们在课堂上学的那种啊,那其实现在呢,他有一套新的新的呢是这样写的。嗯,Select from window table对吧,Go back window start window end,直接这样写就完了,对吧?新的也比较简单,可以看一下这个例子哈。呃,他。啊,在这对吧,在这。Window start window and,这是查窗口的开始时间跟结束时间,对吧?Some,这是。求这个总和啊,就跟我们看德新一样啊,接下来呢,这边。
02:01
From table啊,Table里边呢,这样写的叫to。这很明显是一个。滚动窗口啊,然后go back window start window end,它呢,就是一个窗口里面只有一个值,所以直接人家就上press啊,那咱们呢,如果加word,那多加一个go by word这边呢,多加一个word,然后看到新就好了,对吧,是新的啊,但是呢,大家之前学的不是这种,我们就不聊它了啊,我们往下翻啊,我们往下翻嗯,找到我们所学习的内容啊。呃,这个。啊,大家学的应该是这种对吧,这种写法group window function怎么写呢?这样子的,在这里边呢,在group字段里边,Group by字段里边加一个Java。加一个这个东西,这个是什么呢?To hope session,滚动滑动绘画三种不同窗口对吧,然后呢,这个是时间语义。提取的那个时间字段懂吧,就RT啊,如果说你是处理时间,那就是我们自己给的PT啊好,那interval这是给定窗口大小的。
03:07
啊,那这个滑动牧场窗口大小对吧,这是间隔时间会画成我吧,间隔多少对吧,你比如说你再看下面这个啊,看下例子在这。人家呢,Goodbye,诶user对吧,这是正常的,然后呢,To滚动窗口all the time,这个all time呢,就是这个看见没。Time step看见吧,对吧?啊,这是我们的时间,时间啊,就是那wordmark对吧?好,那我们呢,就把它拿过来改一改对吧?啊,我们十秒窗口,这个注意啊,放到group beds在里边对吧?在这儿加一个逗号,诶放在这,咱们呢不叫all time,咱们叫rt in呢,我们也不开一天的窗口,我们开十秒的窗口,十。Second,对吧?啊十秒啊,这我们窗口,那我们其实也就搞定了啊,那基本上是这样,但是呢,我们之前讨论过一个问题,就是这一次计算完之后,我们关于c house签表我们来讨论。
04:06
我们得。这一步得确定下来,未来往里面放哪些字段。对吧,得放哪些字段好。那接下来呢,我们要讨论可一个签表问题。先呢,我们考虑引擎对吧,我们克里奥里边用什么引擎呢?大家告诉我,你觉得用什么引擎。对吧。在这个地方啊,那未来呢,我们这个抗的心是十秒一个,十秒一个,比如说啊,这边出现了手机。它每十秒里面都可能有一个手机,诶这十秒呢是五次,下十秒呢三次对吧?呃,然后呢八次,然后最终呢,我们要展示展示什么东西呢?手机今天总共被搜索了多少次。对吧,16次。啊,要一个总的值,把这个全部累加起来,这是我们的一个需求的目标,你要搞清楚对吧,就是未来呢,诶,那这是零到十这个数据啊,这是十到20。
05:10
20~30这秒啊,对吧,十秒的窗口嘛,诶他呢,都是这个手机。这个关键词啊,然后最终呢,我们展示到这个可视化页面上面。那。展示一个16啊,基于这个我们把需求给他报出来,对吧,大家想,那在这种情况下,我们应该克林号用什么引擎。可以思考一下。
06:01
啊,大家告诉我。你又不说话,我要抽人了啊。哦。好,我知道。贾总。啊。贾总,你说一下我们你觉得应该用什么引擎这块。就刚才我们所说的业务场景。对吧,最后呢,我要查这个词在今天。被。搜索了多少次展示到页面上面对吧,我们展示搜索最高频次的这种词展示出来。你在直播间吗?你先扣个一啊,看到我敲你名字,你先扣个一好吧。
07:06
这是不在直播间是吗?你你说一下你觉得应该用什么引擎呢。我们现在讨论未来往课里面写我们需要写什么字段,对吧,那第一个呢,那就建表嘛,对吧,建表的话,第一个我们考虑用什么引擎,因为不同引擎呢,可能我们考虑加什么特殊的字段。来做它的一个特殊辅助的一个功能,对吧。啊,用这个丧命motor税,为什么呢?你怎么想的,怎么思考的这个问题?
08:06
啊米motor税怎么想的?嗯。啊,用这个会自动合并。猜猜的啊。猜的。嗯。我来看啊。嗯。凯总,你说一下你在吗?先扣个一。
09:04
啊,你先扣个一。你觉得呢,你觉得应该用什么。你觉得我们应该用什么引擎比较好?就你对于之前click house这几种引擎的一个对比,对吧,它之间那个区别,我们应该用什么引擎比较好,比较好呢?嗯,用replacing motor感觉需要去重,嗯,你感觉哪块需要去重,为什么它需要去虫呢?
10:03
就是你感觉需要驱虫,那你能不能告诉我哪一块需要驱虫呢?嗯,哪一块需要去肿啊。
11:04
就是你感觉需要驱虫哪块嘛,你感觉哪块需要驱虫啊。啊又不错,其他同学呢,怎么认为的,这块我们用什么引擎啊。我们应该用什么引擎啊?啊,不太确定。其他同学呢?有没有同学有有有想法可以说一说?啊,方总说用some模税,因为有预聚合。理由合适吧,对吧,因为。我们最后呢,肯定要做这个聚合,肯定要做这个聚合,对吧,因为我们说了按天聚合,你现在呢,是十秒一个窗口,十秒一个窗口,那未来呢,很明显我们要按天聚合吧。
12:02
对吧,啊,就从今天凌晨截止到现在。我把现有的数据聚合起来。啊,把现有的数据聚合起来对吧,那这样的话,我用商米模税,它隔一段时间会做合并,那未来呢,我在这个house里边,里边存的数据是不是就会少很多啊。数据量就会减少吧。对吧,而是理由啊,理由在这儿啊,对吧,你用三税肯定就一聚合嘛,有一聚合减少我们未来存储的数据量,那未来呢,我查的时候效率是不是更高,因为我可以要聚合的数据就会很少了。没毛病吧?好,那有没有其他不同答案?啊,方总说了,用some motor税,理由是有预聚盒,按照我们的要求,好像有预聚盒会更好一点,第一,存储的数据量少,第二。查询的效率高,你数据量少,查询的时候数据量这个效率不就高嘛,对吧。
13:04
有没有同学有其他的想法?或者说商民税有没有什么缺点?对吧,我们不能光考虑它优点,那想一想它有什么缺点呢?他像这种直接就给我们聚合了,他有没有什么缺点呢。好,那隔一段时间对吧,它就自动做聚合,它有没有缺点呢。开销比较大,开销开销比较大,你指的是隔一段时间聚合一次,开销比较大是吗?这个开销还好吧,你隔一段时间聚合一次,那你要是不聚合不用。你每一次查,你每隔十秒查一次的时候,你都要去喝1C。
14:02
你都要写这个聚合ec。不在一个分区不会去和,那我把按天分区不就好了吗。对吧,那我按天分去不就得了呗。这个还好吧,你正常的,你也要做分区表,你不也得一天一个分区吗。对吧。啊,还有呢啊,但是很好啊,大家都在开动脑筋在想,对吧?啊但是呢,嗯,可能方向不太对,但是这个没关系,只要你肯想就行了。还有没有?方总,你自己觉得呢,就是这个some motor tree,它有没有什么缺点呢?他有没有缺点?不能求。平均值。哎,可以算一个。对吧,但实际上这个平均值也没什么意义了,为什么?因为因为你这个是十秒一聚合,它其实本身你只要开窗了,其实就不能求平均值了。
15:07
我本来就是十秒一聚合的,对吧?啊,当然如果你说你不不开窗。对比那确实算一个缺点,对吧,啊很好啊。如果不开窗。我本身就不开窗。对吧,我直接把这个结果word word1word1写出去,对吧,那。确实可以算一个什么。缺点对吧,但是你已经开窗了,你就不能求平均值了,你那已经开窗了,你都已经做了一次聚合了,你就没办法求平均值了,对吧。看见没有?好,那我们想每隔一段时间呢,它就自动聚合,它就没有保留我们之前十秒十秒的那种数据,对吧?啊,那假如说我有一个业务呢,我要求这个分时。
16:04
我要做一个什么分时统计。能懂吗?我要做这个分时统计,就是说我要求每个小时。我假如说需求变了,对吧,你那正常的求。今天。那。我能不能求分时呢?如果说你用扫米你就没办法做到了,因为他把数据聚合这一块,对吧,你就没办法拆分出来这个分时了,好这是一个点嘛,就是他的需求呢。如果你用了sum米,你的需求呢?未来这个表做的需求就比较单一了,你只能求这个,因为它会自动帮你聚合,这是一个缺点,能明白吗?这个点能不能明白?能明白给我扣一好吧,这是我们说的对吧,你不能求更细力度的,假如说你是按天分区的,他会把一天的数据隔一段时间做一个聚合,那你呢,时间这个力度就不能比天小了,但明明我们开窗按十秒开的窗口。
17:02
对吧,最后求的需求只能按天求。不好。对吧,这个是一个点,还有一个你想啊。这是从需求角度来考虑的,还有一个是什么东西呢?在于如果你任务挂掉,你这个窗口呢。又读了一次。啊,这个DWS呢,挂掉了对吧,我任务挂掉了,我又重新读了一次,我重新读了一次之后,他是不是又写了,把这个窗口又写了一遍了。就数据没办法保证一致性了,大家能明白吗?对吧。就是你数据呢会多。啊,那你如果挂掉了,你把这个窗口重新消费一份,那你就数据完全重复了。而且你还干不掉,因为前面数据可能已经被聚合进去了。对吧,已经都聚合进去了,你再写过来,他也没办法区分有没有写了完了。
18:00
数据多了出错了,一致性丢失了,对吧,所以我们呢,Flink如果写出数据的时候考虑一致性有两个吧,第一。下游如果有事物,我用两阶段提交。对吧,如果下游没有事物,那看有没有密等性。对吧,如果有幂等性,那我幂等写出,哎,到下游自动做驱虫是不是也可以呀。对吧,我到下游自动的做这个去虫。那是不是也可以啊,能明白吗?对吧,是这样的老师。啊,是这个意思对吧,所以呢,我们其实归根结底呢,两个缺点还得用这个replaceable tree对吧,第一。它呢具有这个去重功能,就刚才那个凯总所提到的对吧,诶可能觉得数据要去重,我问他在哪去重,他可能他不太清楚对吧,其实就什么时候呢,当我们任务挂掉了,我们重新消费,我要做驱虫。我要保证最终数据的一致性,对吧,用replace,因为它具有密性。
19:03
好好,第二个placing呢,它并不会把数据直接聚合起来。那么我们可以做这种分时指标。啊,可以求这种分时指标对吧,但是它的缺点在于什么呢?跟三位模税相比,它的数据量会大。比商米motor税未来这个表里的存的数据量要大很多,对吧,因为它不会做聚合啊,不会做聚合,好,那我们敲定了用replacing motor,好吧,那接下来我们想一想啊。我们那。三个字段。啊,但是最后一个那个。逐渐了,就是我们的。所以可以先不考虑对吧,好,那我们先考虑这个分区以及autob,就是你按什么东西进行去重。来想一想,现在呢?我们决定用replacing摸着睡了。
20:02
对吧,那么咱们。分区按什么分区呢?接表的时候按什么分区呢,以及我们。去虫outb字段按谁进行去重呢?大家觉得你觉得应该怎么做?啊,就是我们已经确定了,用replace综合来看它要更好一点,对吧?啊,那我们按什么分区。按什么order by,也就是说按什么去虫对吧。想一想啊,动脑子想一想。
我来说两句