00:01
好,那我们现在来一起复习一下这个拉链表啊,复习拉链表,那这个拉链表是什么,以及它怎么用呢?这个大家应该都知道了,我们就来看一看咱怎么去做拉链表。就看怎么去做拉链表啊,那也就这个拉链表的这个形成过程,我们来看一下啊。开始拉力表行动过程。呃,我把这个那个PPT打开一个啊。那咱们把这个拉链打开,我们来看一看啊。这是咱拉链表的一个形成过程,对不对,那前面咱们讲过,我们拉链表呢,就是里边存的应该是什么,拉链表里边存的是什么,拉链表里边啊,它存的是全量的这个用户。对不对,存的是全量用户的,而且存的是什么呀,它所有的这个历史状态都存下来了,注意这有一个全量全量用户对不对,那如果说咱这个数仓跟业务系统是同一天开始开始搭建起来的,那OK,那也就是说咱们这边诶是不是就不会就就不需要这个所谓的一个初始化导入了呀,如果说数仓跟业务系统是同一天开始运行的,你其实是不需要这个所谓的初始化导入。
01:12
对不对,因为你同一天跑,那你的业务系统当中是不是也没有这个什么用户啊,也没有,那你就正常往里导就可以,这是这种情况啊,但是实际情况肯定不是这样的,实际情况都是什么样的,都是诶我这个业务系统呢,肯定已经开始跑了很多年了,对吧,然后咱们公司呢,现在才开始搭建这个书仓。对吧,更多的情况应该是这样的,那所以说我们数仓当中拉链表要存储全量数据,那你是不是就得先把咱们业务系统当中原有的那些用户啊,是不是先得给他全部导到这个拉链表当中来啊,是不是在做一个这样的一个初始化导入啊,对不对,是这样的啊,那所以说这边是我们做初始化导入的一个原因,那初始化导入的时候,大家要知道我们导数据是从哪儿导。大家要注意是从业务系统当中,业务系统当中啊,你把数据导到拉链表当中来,是从业务系统导的,你要单独的去导一次,那单独导怎么导,我们需要使用scoop,使用scoop把数据从业务系统当中,诶这个用户的全表全部给它漏到我们,呃,导入到我们的HTS,然后呢,再放到咱们拉链表当中,需要有一个这样的一个过程啊这个这个呢,大家得注意需要一个这样的过程,好,那这个往那假如说这步,这一步呢,就是们初始化导入,初二导入啊,那导的时候呢,我们需要干什么呀,需要在咱们已有系统这个用户表原有字段的基础之上,再加俩字段,一个是开始时间,一个结束时间,那开始时间呢,我们就以导数据的这天作为开始时间。
02:39
那结束时间咱们以9999,那所有的用户的这个状态啊,是不是都是最新状态,因为我们业务系统当中存储的就是最新状态,对不对,那历史状态我们改了,就直接就覆盖了,就真改了,对不对,所以说所有的状态肯定都是最新,那最新我们结束日期呢,就都是9999。这是这一步啊,这是初始化导入,那到了后续我每天重复执行的工作应该有什么呢?每天重复的工作应该就是这样了,那OK,我现在时间已经到了第二天了,到第二天了啊,第二天,那我们重复工作就是什么,获取业务系统当中的变动数据。
03:13
变动数据包括什么呢?包括新增,也包括修改,把这些数据全部获取到。全部获取到啊,那获取到之后呢,我们是不是是不是咱们根据谁去获取的,在这在咱们出仓当中,我们是根据那个创建时间和操作时间去获取新增级变动数据的,对不对,那变动数据拿回来之后,咱们接下来干什么,把数据变动数据和咱们那个昨天的拉链表进行合并,进行合并,那合并的时候咱们要做两件事,一件事呢,就是先把你这个变动数据给它原封不动的追加到拉链表当中。当然你需要加一个开始和一个结束时间,开始时间呢,就是今天的时间,因为你是不是现在的状态,你这个这个状态是从今天开始的呀,那把今天时间作为开始时间,那结束时间是什么呢?结束时间是9999。
04:02
为什么都是999,就是说甭管你这边新增还是变动都是九九,为什么呀,肯定都是最新的嘛,对吧,都是最新,那999这是做的第一件事,那第二件事干什么呢?你第二件事啊,需要把你看啊,咱们这个二号用户是不是他那个状态变了呀,对不对,那变了之后啊,你需要把什么,你需要把二号用户的上一个状态给他终结掉。上一个状态终结掉,你看他之前李四这个状态是不是他结束日期是9999,你需要给他变成昨天的日期,也就相当于李四这个状态到现在为止就终结了。到现在为止就终结了,就终结了啊好,那这个终结完之后呢。那终结完之后呢,那是不是,呃,这样一来的话,咱们就相当于我们今天的任务就完成了呀,今天任务就完成了,那到了第下一天呢,到了第三天干什么?第三天获取第三天的变动,包括新增和修改,然后呢,再将变动和修改跟第三天的这个拉,跟第二天的这个拉链表进行合并,然后得到第三天的拉链表。对不对,咱们是这样的一个重复执行的工作是这样啊,所以说那我们一会写脚本的时候,写思的时候呢,就得按照这个去做才行啊,按这个去做才行好,那这是我们复习了一下拉链表的制作过程啊,然后看一下这个同学的问题,我们造的数据是不是只有新增没有变动的,呃,可能是啊,可能是,就是咱们造数据的时候呢,就是说应该是,呃,只造新增,应该是没有这个变动,你要想变动你很简单,你自己去数据库里边改一条不就行了吗?
05:28
自己去改一条,把那个呃,Op time,就那操作时间你得改成当天就可以了,这个可以自己去改一下啊行,那这边咱们继续往下走啊,啊你们这有这个变动率是吧,那有就行,行,咱这个模拟数据这个事儿不管咱们就说拉链表怎么做啊往下看。那这是咱们拉链表的这个制作过程,咱们分析完了对不对?好分析完之后呢,咱们来看看我们这个拉链表这个制作的时候,咱们应该怎么去写circle,应该怎么写circle,第一步呢,初始化拉来秒。初始化拉链表,那初始化拉链表就是什么,是不是就应该是这个这个单独的去执行一次啊,对不对,那单独执行我们刚才分析过了,应该怎么去单独执行啊,单独执行怎么做单独执行呢?是需要我们去那个MYSQ当中,业务数据库当中,把这个整张表使用这个S库给他导到咱们的HTFS上来的。
06:20
是需要倒过来的啊,是单独执行需要倒过来的,那倒过来之后呢,那接接下来后续才是重复执行的工作,那呃,在咱们这个数仓当中呢,你看啊,他这个初始化拉链表是怎么做的呢?这边初始化拉链表是这么去做的啊,就直接从咱们这个哪啊,从ods user info当中,把这个表里边的数据呢,给它导到咱们的拉链表当中来了,导到拉链表当中来了,这就作为了这个它的初始化导入,那这边是为什么啊?呃,首先跟大家说,你在这个业务系统当中,在这个生产环境下,你的初始化导入不是这么去做的,怎么做,我刚才已经说过了,用此库导全表,然后往表里导,需要这么去做,那这边咱们文档上为什么这么去写呢?是这么是这么个原因啊,因为啊,咱们这个文档上,我们去做这个拉链表的时候呢,我们的那个业务系统当中,其实只有一天的数据,其实只有这个3月10号的数据。
07:15
就是初始化导入的时候,只有3月10号的数据,对不对,那这样一来的话,那3月10号的数据是不是都会被导入到这个ods uo啊,因为什么ODU引O是什么,是每天的新增和变化对不对?那因为你只有3月10号的数据,那是不是都会作为这个这一天的新增和变化被导入到这张表里了呀,那实际说说白了,也就是说你3月10号导数据的时候呢,这张表里的数据就和你业务系统当中全面的数据是一样的。是一样的,所以说咱们这呢,就诶把它诶作为咱们这个初始化导入的这个数据源了,因为这样一个SQ是不是就就初始化导入了呀,不用再去写死库脚本了啊是这么个原因啊,就这块呢,大家要搞清楚,大家要搞清楚啊好,那这个玩意之后呢,呃,咱们假如我们现在就用scoop已经完成了这个初始化导入了,那接下来剩下的呀,就是咱们每天重复要做的事了。
08:07
接下来就是咱们每天要重复做的事了啊,那重复做的事有什么,我们往下看。首先这一步呢是哎,制作当日的变动数据,咱们这个变动数据呢,其实不用再制作了,这个已经不用再制作了,为什么呢?因为我们在这个ods层,咱们在ods层是不是也就是这张表里,是不是咱们每天获取的就是新增和修改的数据啊,也就是那个所谓的变动,咱们每天获取的就是这个变动数据。对吧,咱们每天获取就是变动,那既然是这样的话,那你是不是就不用再去做什么制作了呀,咱们不用再制作了,也就是我们每天直接去OS user info对应的这个当天的分区里边去拿数据就行了,他拿到的就是变动数据,就是新增和修改,对吧?拿到之后,那接下来干什么?把这个数据跟我们的这个呃表进行合并,跟我们表进行合并,那导入的脚本应该是哪个呢?导入脚本应该是这个啊,大家来看一下我们导入脚本,你你看啊,我们这还需要这一步吗?
09:05
这一步是不需要的啊,就是不需要,所以这个union all呢,这咱们不要它,咱不要它啊,这步呢,其实是没有没有没有实际的这个。诶诶,这步是需要的啊,这步需要的哦哦哦啊,刚才我看错了啊,我看错了啊,那前面也没错啊,没错,我看错了啊,我看错了,大家来看一下啊,就是这个位置。这个位置我刚才看错了,我以为是那个它那个,总之我看错了吧,总之我看错了,其实这边是没错的啊,那这个circleq是怎么写的,大家来看一下,我们这个circle写的没错啊,这边来大家看这。再看我刚才那个走眼了,看走眼了啊,大家看这边,那这一部分,这个优尼奥是什么,这一部分呢,是呃,再把什么呀,再把咱们这个是不是当天的那个,呃,新增和变化数据给他拿到啊,这其实在拿那个新增变化数据,再拿新增级变化数据啊,新增变化数据,那新增级变化数据拿的时候呢,我们是不是需要给他加一个,呃,开始日期加一个结束日期啊,那这部分是这个没有问题的,是OK的,是OK的行,那这个就正常的拿到了,正常拿到了,那下边这部分是在干什么呢?下边这部分啊,是在处理咱们那个昨天的拉链表。
10:14
是在处理昨天拉的表,需要把昨天不是咱们有一部分数据被修改了吗?修改了之后呢,你需要把它上一个状态是不是给终结呀,也就是把9999改成昨天的日期,改成昨天日期,那这样一来诶就能够把咱们这个数据呢,就是该修改的地方就修改了,那修改完之后呢,我需要干什么呀,需要把呃,这一部分的数据,这是什么?这是咱们对昨天拉链表的修改,上面是什么?是上面是咱们今天的这个新增级变化,呃,我需要把这两部分数据呢,给它合并一下,合并一下,然后用这个丘尼奥合并,那这边其实没问题的啊,刚才我看走眼了,行,这个没错啊,没错,那OK,那所以说咱们这个脚本呢,刚才应该也是这个对的啊,也对的,我再把那个呃UN呢,再给他回复过来,再回复过来,那这边这样一来的话呢,应该是这个OK的,是没有问题的啊,是没有问题的行,那也就是说呃在这儿呢,我们看到的呢,实际上啊,呃就是咱们每天重复执行,重复执行的这个工作就是这些就是这些啊,那初始化导入那一步呢。
11:14
我们单独的完成使用SCO单独的去导一下就可以了,OK,那行,那这边呢,咱们,呃,刚才也是我这个看导演了,这个是文档是没问题的,没有问题的,这块是没问题的,那这个不知道同学那个在群里说咱们这个,呃,这个这个拉链表这边有问题是哪有问题啊,我现在看是这个没有问题的,我刚才看得晚了,我以为这边呢,是把那个初始化导入的部分又给它加在咱们每天重复执行的里边了,实际上是这个实际上是呃,没有的啊啊,我这回又看到了,是这个位置是吧,日期没改是吧,这个日期没改,OK,咱们把这个日期呢,需要改成这个Dollar do date,行行行,就啊应该就是这样一个小错误啊。行,那咱们把这个改一下啊,应该是Dollar_do诶do date,行,那这个应该就是只有这样的一个小错误,一个小错误,呃,我刚才那个是因为我看错了,我以为把那个每那个重复那个初始化导入的部分,我以为也放到这个每天重复执行的任务里边了,实际上是没有的啊,实际上没有的行,那这篇呃,耽误了大家一点时间啊,那那个接下来咱们把这个视频录一下吧。
我来说两句