00:00
好,那么接下来我们看一下数据ttr。TT呢就是它的数据存活时间对吧,那它可以提供的。表或者列的一个生命周期啊,表或者列。也就是说我们可以单独对某一列设置一个过期时间,那过期时间到了,它就会把数据删除掉,也不是删除就变成了一个默认值,比如说你是整形的,那它就会变成0.000就会变成零呗,那也可以对整张表设置一个过期时间,那这个在我们的实际应用场景,大家觉得有用吗?这其实还是蛮好用的啊,你想想咱们的离线数据肯定是不会想着让它过期对吧,不会删,那么但是在我们实时场景。往往我们只需要最新的一些数据,那我们可能会设置一个ttr特别是什么呢?涉及到用户画像这一块。用户画像,一般咱们用户画像,呃,新的一些标签分析的时候只需要最近几天甚至一天,对吧,通常可能需要三天左右啊,那可能我们就可以设置一个TG啊,设置为三天就行了呗,对吧,那过期的数据它自己会做合并的时候会做一个清理啊。
01:19
还是蛮好用的,那我们先来试着来做一个列级别的ttr,那它的语法大家瞅一瞅。只需要在单独的这一列后面加上一个什么。加上一个TT语法就行,那这种方式就是对这一列做了一个。过期时间的设定,那么大家注意,那你必须是那这边你看我是不是用了咱们现有的一个列啊。对吧,以大家注意它的时间是data time,然后呢,再去加减一个什么呢。时间的固定写法叫interval加一个数字加一个时间单位可以是秒,分。小时天都可以啊,那注意这边有讲究啊,这个字段不能是主键字段,也就是说它不能是ID,能理解吧,不能基于ID来,当然还有第二个要求,就是类型,必须是日期类型来,我们先建一张表。
02:20
好现好了,接下来我们插入数据,那么插入数据的话,咱们这边要注意怎么样呢。你看这个2020年肯定到期了呗,那咱们是不是要来一个比较新的一个数据啊,当前的时间对吧,我改一下啊,现在是二五,那时间应该是二一呃幺五,我看一下啊。幺六了,那我们拿一个1650呗。好,我赶紧啊,不然一会时间超了,那你想想我回头那个total amount,那一定知道是不是对于这个时间加十秒,也就是说17分的时候过期对吧?好,那我们赶紧插入回车,这个时候我们查一下,呃,T的MT3好回车现在数据都有对吧?那其实我们等时间呗,我们刚才电表语句是基于这个字段加十秒,然后呢,让它过期啊,让它过期我们等一会儿啊等一会儿。
03:28
你看啊,这个字段加十秒。稍等一会儿。时间差不多了,你看已经过了那个点了,对吧,我们这个时候首先来查一下这张表。发现这个数据是没动静啊。因为他还没执行合并嘛,呃,我们让他强制合并一下啊table呃,TMT3呃,Final。
04:00
回车。啊,我先看一下啊。好,那我们。再查一下这张表。那这边可能会出现一个问题,就是什么呢?你发现它并没生效对吧。我们看看啊,哪出问题了,Optimize table这个。茶,那就很奇怪,我试一下啊,因为这个就。很奇葩呢。那这样这样啊,这样我那个。我重启一下我的click house,因为可能这个是我的问题啊,这是我的问题,我重启一下。
05:01
好,我再进来。已经重启好了,对吧,我们先查一下这张表,T order,呃,NT3。还没有对吧,我们手动触发合并,然后呢,我查一下这张表大家看到没有。是不是成功把它处理掉了,那我之前这个问题在哪呢?其实它是这样,时间到期之后,它会单独再起一个合并任务的,是一个特殊的合并任务,那由于我的机器可能那个资源太少了。啊,卡住了,然后呢,我就重启了一下,那我们重新试了一下,对吧,那大家应该不会像我这样,如果你个人玩的机器配置也比较低,特别是CPU比较差的话,那你可以尝试着说呃,重启一下,然后再手动执行合并,正常来讲咱们就是到期呃,然后合并的时候它就会自动清理掉了,这跟你机器资源有关系啊,太吃资源了对吧。
06:04
这个就是一个列级别的过期,你看设成了一个默认值对吧,Total amount。好行,那我们再往下看啊,那除了这种呢。字段级别还可以什么表级别的?那么表级别就是来这个,咱们拿这个语法看看是不是一个outt table的一个语法,跟have那个一样,对吧,要修改表的一些配置,就用一个out table这么一个语法,那我对这张表改了一个什么modify t t。那后面就指定整张表的ttr怎么个配置方法,那我呢,同样是按照什么呢?Create time加上十秒来设置的啊呃。来。那能刚才也讲了对吧,秒分小时天欧月。剃度年。有这么多个时间单位,这个这个地方可以替换掉啊,那这个咱们肯定是按秒来演示的,对吧。
07:06
那你想想,大家想想我执行这一句会发生什么事啊?是不是根据create time加十秒来做一个TT操作对吧,但是大家想一想,它是全表一下删光吗?那肯定不是啊,那你想想我这边是不是因为时间都一样,他其实是一行一行来的,你看这一行的时候。这行数据要不要删取决于什么,取决于这个字段的值对不对,如果这个字段的值我加上十秒钟之后过了这个点,是不是整行数据被删掉啊,那在我们实际应用中,你可能说每条数据的时间都一样吗?那肯定不是啊,比如说这个是,呃,51 52 53,那你到时候是不是这一条肯定是先被删的呀,对吧,然后这一条才会到了点才会被删嘛,这一条到点才会被删啊,所以严格来讲,整张表的ttr是不是根据每行数据来的。
08:04
对吧,那我们现在执行的话再查一下。你看。怎么样,还有没有?是不全过期了。对吧,我查这张表是不是全空了。因为咱们那三条数据刚好时间。时间都是一样的嘛,所以他一删都被全删了啊。它是跟有一个判断字段的啊,判断字段啊。行,这个是咱们的一个用法,那其实呢,咱们看一下官网啊。这里。呃,这个是哪呢。这个是。能指退这里呢,大家看一看啊,往下拉往下拉它也有一个ttr的一个介绍啊。嗯,我看看在哪,应该在比较后面,哎,在这ttr。
09:03
那么我们刚才那种语法是不是属于这种直接在表时,一个是指定列的一个过期时间,每一列都行,对吧,而且它这一句有一个提醒。Ttr子句不能够使用T的字段,也就是组件字段啊组件字段,那么还有一种,如果我的表已经建好了,生产环境中往往是表现建好了对吧,但是我没有指定ttr。那现在我想加上对某一个字段的TT行不行呢?可以啊,也是all the table的一个写法,但是这边他写的是什么?Modify current,就修改列的属性呗,相当于说对于这个列你重新定义一遍就行了,能理解这个意思吧。把整个列,你看这是列名,然后这个是什么类型,后面跟一个什么TT语法啊,这样是可以的,是允许的啊,就是说你表现好没指定,可以后面再去指定啊嗯。
10:01
那后面表级别的。咱们是不是用的这个。对吧,修改表modify t tr,这是整张表所有相当于说所有字段都加上了这么一个TT的效果,那其实咱们建表语法除了这个之外,你再看下面这种。哎,这两种建表语法也是可以的,什么意思呢?我ttr不写在上面,我写在哪呢?写在order by语法的后面,单独加一个什么ttr。可以吧?嗯。但是这种你想想。是不是对全表的,这个是对全表的啊,所以咱们应该是,就是你建表时候怎么指定呢?可以这么来指定。这是见表时指令啊。这对好,那其实那后面有同学可能看到什么一个月对吧,那后面这个什么土什么土什么,这是干嘛呢?移动数据的大家知道一下就行,移动数据就过期之后啊,这些数据要移挪到哪里去,你看它有这么几种动作,一种叫delete。
11:14
咱们是不是没写delete,它是什么默认的,那还有一种叫to Dis或者to这个,那你看它的翻译。移动这一部分的数据到哪里了?AAA这个磁盘下面,移动这个数据到磁盘BB下面,对吧,就是挪动数据啊,我并不是真的想删我历史的数据,想把它放在其他地方,这也允许的呀,虽然过期现在用不上。我只是想把它打入冷宫对吧,回头真正需要我还可以找到啊,相相当于说是一个归档啊。行,这是咱们关于ttr的啊ttr,那么大家应该,呃,这个还比较简单啊。
我来说两句