00:00
从第一个来支付时表啊,它是属于这种事务型时表的啊,那事物型实表它的特点就是什么。就是什么。啊,就是它所对应的业务系统当中的那张表啊,有以下特点,什么特点啊,啊就是只会新增不会变化对不对?所以说那这样的表我们去同步的时候呢,都是什么同步,全增量同步啊增量同步差点给我带跑偏了啊增量同步,然后这个事物表呢,就是事物型的实表呢,那有什么表,就是增量表啊,增表就是分区表,那分区表呢,每个分区里边存的就是当天的新增数据,对吧?啊就是这样的啊,就是增量表,好,那接下来我们看第一个这个支付时表啊,那支付时时表呢,我们现在呢,先来明确一下,支付时表当中它的一行数据所指代的是什么,其实也说白了一个所谓的力度对吧?一行数据指代的是什么呀?是一次支付记录对不对啊,一次是把这个搞清楚,然后呢,我们看一下它这张表里的字段啊,它的字段呢,其实就是两类嘛,啊,一类就是唯独外建,一类就是什么?就是度量值啊,那维度外建它应该都有谁呀,也就是它跟哪个维度相关,第一个时间维度肯定有关系,那第二个呢啊跟用户肯定有关系,那第三个呢,跟地区是不是也是有关系的呀?啊是这样的,跟其他是没有关系的,那度量值呢,很简单,就是支付的金额啊支付金额那OK,所以说我们来看一下这张建表语句啊来。
01:28
拿过来,跟着C。嗯,来,我们把它放到这个data group当中啊,放在这位啊,来一起看一下,呃,咱们看什么啊,主要看一下这张表当中的维度外键和它的度量值啊,但是你会发现这张表里是不是还有一些其他的字段呀,其他字段怎么来的,一会来给大家解释啊,我们先找呃,维度外键和度量值,维度外键首先用户ID。对不对,然后还有谁还有一个地区ID。2ID没错吧,然后接下来还有一个时间ID吧,诶你找一找有时间ID吗?有没有。
02:02
没有时间ID。哎,那没有时间ID怎么回事呢?没有时间ID我怎么跟时间维度表照。啊,谁是时间ID呀。谁呀?分区字段在咱们这儿呢,哎,分区字段是我们的时间ID。啊啊,为什么呀,大家想想啊,我们这儿是不是按照天分区,按照日期分区啊,对不对,每一天里边都是当天新增的支付记录,对不对。对不对,所以这个DT是不是就能代表哎,我这个支付时间呀。能代表吧。对不对,因为我现在是怎么来的,我是把每天新增的支付记录放到了当天的分区里,那当天分区的ID是不是就是当天的日期,那所以说那在这个地T字段呢,是能够指代这个支付时间的。啊,只不过就是没有精确到十分秒,只有年月日啊,是这样的啊,而大家要注意我们这个DT的这个字段的格式啊,你看我们前边所有的这个分区字段啊,点错了,所有分区字段你看啊,咱们都是什么格式,是不是都是年杠月杠日的格式啊,对不对?而我们那个时间维度表点开,那它的主见是什么格式,年杠月杠日是不是正好能够关联上啊,所以说在这儿呢,实际上我们这个时间的ID就是我们的分区字段,这个分区字段大家不要觉得它有什么特殊之处啊,啊这个东西啊,我分区字段能进行招唤吗?可以的啊,就是这个分区字段呢,你看你你其实谁select星from这张表的时候,你就能看出来,它就是返回,也会把这个字段分区字段返回啊,它就相当于是一个你可以使用的一个字段,只不过呢,这个字段并没有存储在咱们的这个文件当中,存哪了呀,是存在一个路径上面了呀,啊年月就是存在咱们那个分区字段是不是DT等于什么,那是不是也是能够当做一个字段去正常使用的呀。
03:53
是这样的啊,你就把它当成一个普通字段去使用就行了啊,这个是没有任何问题的啊,所以说我们这个维度外键就找到了啊,一个是user ID,一个是pro ID,一个是DT啊好,那咱们的度量值是谁呀?度量值就是这个payment amount就是它。
04:11
好,那搞定了啊,然后呢,剩下的这个表字段啊,都来自于什么地方啊,大家解释一下是这样的啊,因为咱们这张事实表,它的这个主要的数据来源,你说应该来自于哪儿啊。应于哪张表,你看业务系统它主要对应于哪张表,是不是主要对应于咱们这个payment in full这张表是不是主要对应于它呀。对吧?啊,主要对应于它,那所以说实际上这张表我的这个数据来源主要就是ods层的payment info,所以说剩下的这些字段呢,那其实都是从哪儿继承过来的呀,都是从DWD层的,哎,Payment,哎,不是DW,应该是ods层的payment in for来继承过来的,是这样的啊,然后这些字段呢,其实你可以简单看一看啊,就是有些段其实也没必要拿过来啊,但是有些段还是有点有点意义的,比如说谁呢?比如说你找一个啊找一个诶,比如说他。
05:06
Payment type,这个payment type是从哪来的,是不是就是从ods层来的,对不对,那这个字段其实它是不是也是有一定的这个分析的意义的呀,那这个字段我要给它划分的话,你说它应该属于一个什么字段呀?他那不是就支付类型,那它可以作为一个什么类,做一个什么资。什么字段?唯独子短呀。对不对,他是不是也是相当于在描述我这个支付的事实,你支付是通过哎什么类型支付的,你是用支付宝还是用这个啊微信啊,还是用其他的方式,对不对啊啊这也是一个维度字段,也就是说我想通过这个字段告诉大家一个事儿啊,就是我们的维度不是维度啊,是事实表当中,事实表当中我们的字段类型呢,不一定只有谁。不一定只有维度外键和度量值,我也可以有其他的字段。啊啊,可以有什么,是不是也可以有维度字段呀,不一定只有维度ID啊,实际上也可以有维度字段,甚至什么样啊,甚至假如说我们的维度模型当中,我们有一个这样的现象,这是事实表,这是维度表啊,那假如我有某一张维度表,或者是某几张维度表,我这张维度表里面的字段很少。
06:19
只有一个或两个字段。啊,那这时候我都可以怎么做呀。对,我都可以直接将这个维度表当中字段直接怎么办,并入到咱们的维度表事实表当中,直接把这个维度表就怎么样了呀,去掉了啊,那这个现象或者这个操作,咱们管它叫啥呢?叫做维度退化。啊,相当于将维度表当中啊,因为这个维度表太小了,对吧,只有一两个字段,那我就可以把这个维度表直接干掉,然后把它字段呢,退化到我们的实值表当中,这个操作叫做维度退化。啊,是这样的啊,所以这块呢,大家其实以后见到类似的实时表,诶,这里边怎么还有维度字段呀?哎,这个你也不要觉得新奇啊,这个是可以支持这样操作的啊,而且这样操作之后呢,其实这个数据肯定是会冗余一部分,对吧?但是你换来的是什么,是不是就不用再和维度表JA,是不是性能要提升一部分呀?啊这个要搞清楚啊,其实这个很灵活的啊,都比较灵活啊啊那这个就是给大家介绍的刚才一个概念,维度退化的一个概念,咱们简单了解一下就行啊啊这就是咱们这张事实表,哎,它的这个字段啊,那表建完了,咱们接下来就该想办法往这里边导数据了啊啊这里边导数据我们得分析一下啊,这张表的主要的数据来源是哪儿?它主要从哪来?
07:33
肯定是从ods层的那张表来,对吧,Ods层哪张表呢?来咱们先一个select from啊。应该是ods层的payment in for吧,咱们把这张表点过去,点完之后呢,我把这个界面语句呢,我给它粘出来,咱们不用全粘了,我们只把谁粘过来,只把这个字段粘过来了,CRLCF3,咱们就看这个字段啊,然后呢,我再回到刚才的位置啊,回来那回来,那这里边我们需要它的哪些字段呢?我看这个对应关系能不能一一对上啊来,首先第一个ID就是支付记录的ID,没问题啊,Out trade的no,哎,没问题,Order ID我也有,优的ID我也有啊,没问题,这个也有啊,Total amount,呃呃,咱们这这个字段名是不是变了一下啊,之前是total amount,这回咱们变成啥了,Payment amount,但是它俩是对应的,没问题,交易内容有啊,支付类型我也有,支付时间呢我也有,诶谁没有,诶pronce ID没有,省份没有,那这个省份没有,那那这个怎么办呀。
08:33
没有的话,咱们就得想办法怎么办呀,去找对吧?啊,怎么去找啊。那怎么去找?那这时候就得用到咱们的关系模型了啊,那这时候我们打开之前那个关型数据库,咱们建的那个模型图啊,这个模型图大家还有吗?没有的话,一会儿我给大家发一个啊,大家可以用这个啊,这时候呢,你是不是就得借助咱们这个关系模型,这个关联关系去找你所需的字段了呀,对不对,咱们看一看这个关联关系什么样的啊,在这块咱们看这。
09:03
这个位置啊,这是payment in份对吧?Payment in份里边有一个order ID ID关联的是什么?是不是你支付的那条订单是不是关联它,那每一个订单是不是都有一个proce ID关联这个base pronce这张表对不对?那所以说我是不是可以先通过payment infer当中的order ID去找他的订单,因为你支付是不是肯定绑定一个订单,你的订单肯定有一个provice ID,是不?这是不是就能找到你这个支付的provice ID了呀,是这这能找到吧,那说这时候呢,我们就需要诶将我们这个ods的两张表去做一个join啊,去做一个join。啊,然后呢,去获取到我们对应的这个pro啊,就是这么一个过程啊,那这回照的时候大家来想想啊,咱们又涉及到照了,只要一涉及到照呢,你就得考虑啊,我是应该让他全表照呢,还是只照一个分居啊,咱们得把这些事呃得搞得很清楚才行啊,那你说这个怎么着呢啊怎么着。
10:02
啊,首先先明确啊,先明确一点,这张表是什么表,是事物性事值表,那从同步数据同步这个角度去看呢,它是一张增量表,对不对?它每天的分区当中只存储当天新增的数据,对不对啊,那我们ods层payment in份那个表是不是也是一个分区表,那他每天的分区当中是不是就是啊今天新增的数据,所以说我们从ods层payment份里查,是不是只查一个分区就够了呀,对吧,咱们只查一个分区,那先把这一个分区查出来啊,先写子查询吧,咱们select,然后呢,比如说先所有字段我都需要,那我这呢就写select星了啊,那咱们比如说先写在E先这么写吧,啊来行等等where where啥。啊VDT,那是不是2020杠零几零六杠幺几呀,114啊没问题啊,这是我先拿到我这个数据的主体,然后呢,我需要怎么做呀。我需要拿到你这个子查询当中,也就是你今天这一天的这个支付记录的啊,对应的那个订单的province ID吧,对不对,那你是不是得去找一下那个,呃,你所需的那个订单信息啊,对不对?那这个订单信息从哪张表里找,是不是肯定是从欧引里去找啊,那select SE这呢,因为没有写分号,所以它提示的不对啊,咱们写个分号,那select,然后呢,这个应该是from啊,应该是ods层的older。
11:30
In for,对吧?Ino OK,那回忆一下put ino这张表,我们所采用的同步策略是啥?还能想起来不同步策略是什么来着,是新增啊还是增量啊,是增量还是全量,还是这个新增一变化。忘了是吧?啊忘了的话你可以怎么做,可以去看一下咱们这些文档,或者说你不去看文档,你直接看谁就行,直接看咱们库脚本是不是能看出来对吧,咱们打开库脚本啊,My circle to ATS,那咱们看这张表当初采用的是增量全量还是新增级变化,这个看哪就行了呀,是不是看这个circle的。
12:07
过滤条件就行,这不主要看过滤条件呀,对不对,咱们找到O以后or DR加号线in。啊,这个从头开始找吧,啊来O点引,OK,第一张表不就欧点引,你看它的过滤条件是啥。哎,吃这个。是不是可time等于Dollar to date,或者是修改时间等于Dollar date,那这个获取的就是啥呀,而且中间是或对吧,这是新增,这是啥变化,所以它是应该是新增级变化对吧?啊,那这一下就看出来了啊好,那也是这张表咱们是新增级变化,那既然是新增级变化,我们接着写啊,那你说他这一天的分区里边存储的就应该是什么呀。是不是就今天新增及变化的订单呀,对不对,那假如说我现在呢,先拿这一天的分区啊玩DT,那等于2020杠零几零六杠。
13:03
1401814。好,那假如我也是select行,咱也select型,OK,那你说我现在呢,让这俩子查询去做join,能不能满足我所有的这个数据的要求啊,其实能不能满足要求,咱们其实只要能实现这样的功能就行了啊,首先那这个你查出来的是不是你今天支付的所有订单。对不对,那我们想找什么呀?找你这个支付的订单,它的province ID对不对,所以说只要下边这个子查询当中包含包含什么,包含你今天支付的所有订单就行了。是不是就行了,对不对,那下边这个子查询里边是否能够包含我们今天支付的所有订单呢。是否能够包含呢?包不含,包含不包含。啊,你得思考一下这里边儿有什么,有新增的订单,也有变化的订单,这个所谓的变化订单指的是什么呀?只要你那个订单状态一发生变化,我是不是就会咬你啊对不对?那假如说你今天支付,你今天支付了,那你说你状态变没变?
14:10
变了对吧,只要变了是不是肯定包含在这个里边,那所以说那下边这个子查询啊,那肯定是什么呀,肯定是哎,包含你今天支付的所有订单的。啊,肯定是包含的,那所以说我们直接让这俩照呢,就能够找到你今天支付的所有订单的,那所以什么呀,所有的proce ID这个是没问题的,所以他俩是可以直接照唤的啊,也就是说你其实看似这俩circle这个词很简单,但是其实这里边有些东西大家需要,哎多思考一下啊,都思考一下,就是说你必须得搞清楚每一张表,哎,我这个结构到底什么样的,我这个分区,我每个分区里到底存的是什么,对不对,你得把这些东西搞清楚啊,才能保证咱们这个circleq写起来是没有问题的啊好,那接下来咱们就让他俩这个join呗,啊那这个呢,比如我先写一个子查询CTRLX啊,来来括号,那就写子查询是不是得给它放到括号里边啊,放括号里边呢,然后给它起一个别名啊T吧这个比如说咱们叫做o paymentin对吧,叫PI吧,啊叫PI,那下边这个呢,我们叫做啊CTRLX啊啊O叫O德尔型嘛。
15:13
叫O行不行,Order不行啊,Order是什么?Order是咱们serve当中的关键字,对吧?啊,你要想用得加那个标号,那比如说咱们就叫哎OI吧order吧,啊就OI啊这个就没问题了啊行,那他俩要进行join的时候呢,那咱们得考虑一个问题啊,那咱们采用哪种join方式呢?啊,这的方式咱们有内联有外联啊,有什么左外联对吧,那这应该使用哪种啊。其实啊,使用哪种,那得考虑什么呀,咱们想要哪部分结果对吧,对不对?咱们来简单回忆一下,这个内联外联有什么区别啊,这是两张表啊,这两张表,嗯,那他俩是这么去照的啊,这是对应关系,应该能看懂吧,这部分是两个表都有的,对不对?那这部分呢,是他自己有,这部分是他自己有能看懂是吧?那如果说我们采用内联,你返回的结果是哪部分?哎,公共部分是不是这这这部分呢?如果是左外联呢?那返回的是是不是这部分以左为准,哎,那这一部分的字段是什么呀?
16:17
是不是会引闹给你返回啊,对不对啊,这能搞清,也就是你最终返回的数据呢,应该是,哎这部分啊,当然这部分没有,就是用闹不齐啊,这是左连,那部是右外联呢,就是right来这个right状,Right应该是哪部分呀?是不是有本为准呀?那这部分数据是啥?哎,那就是闹了,是不是应该是反回去这一部分的数据呀?啊OK,这是右联,那如果是全外联的负join或photo join,那反的什么呀?是全有,是不是该是这部分呀?那这部分这是啥?那这儿呢,那也是no是这样的啊,那咱们这儿你要返回的应该是哪部分数据啊,我应该是返回的是这一部分所有的数据,因为我们这是支付实时表,对不对,我返回最会有支付记录就行了啊,那所以应该访问这部分,那这部分你在写什么中文?
17:03
Left round是不是肯定没问题啊,左链肯定没问题,但其实咱们这儿呢,因为什么啊,因为他们的包含关系是这样的,是不是我下边这个紫查询包含上边所有的呀,那所以说你用左联或者用什么,用内联是都是一样的呀,啊在这相当是没问题啊,用谁都行啊,这个自己思考思考啊,那咱们这呢,比如说就用一个呃,In the照吧,In the就是join呗,啊就是照就行了,那join完之后呢,咱们写连接条件啊。On on,谁是不是on pay点谁应该是有一个O的ID啊,等于谁等于哎,OI点哎,ID哎,是不是就装上了啊,在上边你再去选择所需的字段就行了,Like from这俩字查句啊,然后这个需要什么字段呢?自己去取就行了啊,那这里边大部分的字段都从哪来不从。这个配这个子查询来,那只有一个字段,哪个province ID,咱们去从OI里边去出,是不是就可以了,那就完事了啊,当然这里边咱们有个点需要优化一下,哪可以优化一下,咱觉得。
18:05
这个子查询咱们有必要紫蓝星吗?没必要,我们是不是用不了这么多字段,用谁就行了。取谁就行了啊,一个是ID,还有一个谁province ID啊,ID是用用用,用来干什么,是用来join的,那province ID呢,是我我需要需要的字段啊,其实选俩字段就够了啊,那上面那个我我都需要都需要就都选出来就行了,那剩下把这个剩下的字段补齐就行了啊,那咱这没必要一点点写了,咱把文档这个粘过来啊,粘过来之后呢,我发现他这个别名跟我不一样啊,它叫PI是吧,那PI就PI吧,那咱们直接把整个全粘过来啊啊那就不太笑啥呀,咱把这个给它替换一下啊,CTRLV啊行,那这个跟刚才没啥区别啊啊OK啊,这个应该能看懂,行,那剩下的事呢,就是insert一下,当然insert我们加一个allright,加一个table啊DWD啊D叫做。
19:01
呃,哪张表这是。不是am了,叫fact了,对吧,Fact payment four,那我们来一个partition啊,后边呢,我们来一个哎,DT啊等于2020杠零零几零六杠114,诶诶搞定啊,这就是我们这个点门这个插入的语句啊,诶来我们把视频录一下。
我来说两句