00:00
好了,接下来我们来执行玩一个比较高端,一点也不是高端,就是通过自己的设计,通过搜狗L语法来去虫,那你可能一看到group by去虫想的就是说哦,我要按照UID,我就group u ID,然后再套一层纸查询就完事了,那种太low了,对吧?那种没毛病是可以啊,但我就不这么玩啊,我就不这么玩,我要通过一个什么呢?删除标记,哎,这是我最终实现的语句啊。Group u ID还是正常的,但我不套子查询呢,我不套子查询来having删除标记等于零的什么意思?零是不是被删除的?这边你现在不加效果也能实现,但是删除的时候数据变更你无法识别。这是我预先预先准备好,一会咱们测一下我删数据能不能实现啊,这只是删数据用的,那其他的我介绍一个函数,这个2MAX。
01:06
他传两个参数,这是第一个字段,第二个字段,它什么意思呢?根据如。就可能这个字段一字段数据有很多条。那么我根据第二字段值最大的那一条为准。那我放一个create time是不是时间最大的,时间最大是不是就最新的啊,就这么来实现的啊,这个是不是有点像咱们have里面有一个last value,开窗函数里面的last value取最后一条吗?没印象这个生产上很经常用的这种语法,还有flink circle是不是也支持这个函数啊?还有first value嘛,对吧,就用于这种场景嘛,分组,然后取组里的第一条,或者取组里最最后一条嘛,你先排个序对吧,那咱们这个函,呃,函数就有点像这个啊,这函数需要你们记住,可能未来你们大概率能用得上,如果工作需要的话。
02:13
好行了,这个是我们先看一下效果呗,但是现在已经是1000万了,对吧,那我在干嘛,我再重新插一遍呗。来,我再重新插一遍,然后我们看了一下是有50万条重复啊好,现在我把写好了这个语句。我来跑一下,看它的结果输出是什么。当然我没有做靠的对吧,你这里能看到结果级的数据量多少啊,1000万说明没毛病啊,没毛病能实现,但是他是不是可能查询需要一点时间。对吧,这就是他牺牲的东西,你不想影响他的正常服务,又想实现去虫,那么你可以考,你只能说通过自己的设计来实现,语法来实现,但是效率可能就慢了一点了,这是一个取舍,取舍,那后面我还要测什么,更新数据,删除数据。
03:21
对吧。就我不仅仅停留于单纯的一个去虫,我们更丰富一些场景,那这个时候,所以我要做一个事,我要把这个语句创建一个什么视图,不是物化视图啊,是普通的视图,也就是说把你的连招记下来,就标记成A,然后我查A就好了,就相当于说查了这个。对吧,好,那我们现在开始玩啊呃,先把视图创建一下,语法呢,就create view,然后起个名字as,下面就是你上面的搜索语句嘛。把这个操作记录下来。饮时操作没有数据啊。
04:02
视图不存数据啊,只存操作逻辑,好,这个我叫VI test a视图的名字啊,好,创建好接下来,呃,先试一下插入重复数据。哇,他一条你看。0AAA。我们先看一下,呃,我们先看一下,现在1000万。零五十五十万一千零五十万条,那我插入这么一条新数据,只差一条啊。我再看了一下,是不是10500001条,好,那么现在我就要来查了,你看在行,我是不是直接查这个视图就行了,他查视图相当于说实现了之前的语句嘛,那在这之后我又做了一个过滤VRU了,IDE等于零。我们看一下。
05:06
有没有?这条是谁呀?AA嘛。这个也不算,只能算是一个什么插入嘛,对不对,为什么呢,你看select from t。叫什么test a where u ID等于零,原来是没有的吧?原来是没有的吗?你看嘛,原来是不是有啊,但是现在我查出来是不是只有最新一条。能理解不,这就是我的效果啊,并不是说原来没有零,我插入一条自然有它啊,是原来就有零,你看最新版本,这跟H配置像不像?取一个最新版,但他没提供这个功能,我们自己实现了啊,没有版本管理。
06:02
好,这是一个插入重复的一个数据啊,那过滤出来只是为了让大家看,直接看效果而已啊,直接看效果,呃,那接下来我们测一下三数据,这时候就要用到咱们的标记了,咱们之前这个语句是不是顾虑了一下,我说一表示没被删,零表示被删了。林表示,被删的。来呃,啊不对,说反了啊,一表示被删了,零表示没被删,好那我现在插入一条标记为一的。那这个值是不是刚才我们插的那条数据啊,四个A啊,然后ID是零啊,我现在相当于说把刚才那条我要删掉,我这个时候不是真正直接把数据删了,而是在插入一条新的数据。并且标记为删掉,来,我们试一下。
07:03
我再插入一条。一哼。哦哦哦,找拷贝的是吧,银色的银度,难怪我看着有点懵逼。哦,我这里本来就少写的ins色好,现在插进去了,我count一下大家觉得应该多少条了,10500002吧,对吧,一条,刚才插进去的一条,想要让把它删掉啊,其实是新增数据的方式,现在我们要执行刚才的查询呢,刚才查视图的那个,诶不是这个。我们先看一下现在数据长啥样,ID为零的现在是不是有四条对吧?好,那我们既然标题为删除,是不是希望这条数据不再出出现了啊,我们试一下他试图那一句呢。
08:06
啊,这是不是查视图啊,然后看一下UID等于零还在不在。没了吧,这是标记的一个。会用,这是不是咱们自己实现的,加了一个字段专门做标记吗?能理解吗?也就是说未来你架构设计数据表结构的时候,你可以考虑一些字段用来做标记,用一个一或者零就行了,它占用资源不多啊,数量不大。为什么要这么做?同学们扯到一个咱们实际场景。我们说click house支持更新跟删除吗?严格来讲它是不支持这种事务型操作的,对吧?它是定位是一个分析型数据库,主要是查询跟分析,如它通过语法是能近似的实现更新跟删除,但它是什么?哎,有一个延迟,什么延迟是不是也是合并分片的时候才会真正将数据处理掉?
09:10
所以呢,那如果我们能通过这种标记的方案,我们叫方案来实现,是不是可以实现类似立马看到效果的一个结果呀,这就是一个拔高的一个应用啊。大家可以体会体会这种思想啊,其实这种思想在咱们框架底层都有体现,他很多时候也是这么设计的啊。那还有一种TD之前介绍过了呗,对吧,呃,TDR。好,这个就是通过拜驱虫,他们就是使用一些复杂一点的玩法来玩它啊。
我来说两句