00:00
呃,来吧,各位同学,呃,咱们继续,呃,设计和开发咱这个DWD层啊,DWD层我们应该在前天的时候讲了一张实时表,对吧?呃,就是那个所谓的加构事物实表,呃,其实这张实表呢,相对来说还是比较典型的,那实际上呢,我就想通过这张实时表呢,让大家体会一下,就是之前哎我们所说的一句话,那句话一定要深刻的体会一下啊,这体会哪句话呢?就是说我们再去,诶就是说我们再去熟悉我们那个业务系统的这个数据的时候,对吧,我们必须得做到哪一点,诶你必须得做到是不是你得跟业务过程对应起来,对吧?咱们得知道就是每个业务过程到底会影响到哪张表,然后呢,你还得知道什么来着,就是他对这张表的影响逻辑是什么对吧?具体的影响逻辑是in色呢还是update,你插入的是什么,你修改的逻辑是什么等等,咱们必须得把在这一点做到,做到之后我们是不是再去做这种事物事实表的时候,你才能整明白啊,对吧?这这句话大家一定要深刻体会一下对吧?这个其实主要是什么时候用啊,这个逻辑是在我们往这张表里去装载数据的时候,是不是需要用到这个影响的逻辑啊,对吧?诶这1.1定要搞清楚,行了,那这个咱们就不再多说了啊,那接下来呢,我们再呃多讲几张这个实时表,然后呢,咱们再把这个实时表的设计,还有这个制作的过程,我们再体会体会,对吧?可能一张表大家体会的不深刻,咱们多来几张哎,就会更好一些来,那现在我们看一下第二一张实时表,第二张实时表呢,我们称之为。
01:26
诶,交易与下单事务实表,那显然它对应的业务过程是不是就应该是那个下单呀,对吧?OK,好,那还是老规矩,我们首先需要先设计一张时表的表结构,然后呢,再去写它的数据状态语句,那现在咱们先来设计它的表结构啊,那设计表结构呢,是不是还是那四个步骤啊,对不对,那在这呢,我们就还是打开之前那个总线矩阵对照的总线矩阵去说啊,找到业务总线矩阵在哪了,在这个位置,然后呢,我们往下翻啊,走走走,来到这个Excel咱们打开。好了就摆在这了啊OK,那现在呢,我们再把这个表的设计过程再走一遍啊,首先第一步就是选择业务过程,咱是不是已经选择出来就是下单呀,对吧?好,那接下来就是第二步声明力度,声明力度呢,对于下单这个业务过程来说,大家说它的力度应该怎么声明,也就是将来这张表一行数据指代的应该是什么啊,其实就是一次下单操作对吧?当然这一次下单操作我们这么说不够精确,你要精确的话应该怎么办呢?我们必须得,呃准确到什么程度才行呢?得准确到最细力度对吧?那所谓的最细力度应该是什么呢?是不是得精确到是哪个用户在什么时候对吧?下单的哪个商品是必须得精确到这个商品的这个力度才行啊,对吧?哎,这1.1定要搞清楚好了,那这就是咱们这张表的一个最终的力度啊,说白了啊,其实这张表的力度就跟咱们业务系统当中哪张表的力度是一致的呢?就是你跟那个o detail是不是一致的呀,对吧?诶这个大家理解一下就行了,好了,那接下来我们继续往后看那第三。
02:57
数呢,就是确认维度对吧?那与下单相关的维度都有谁呢?这个相对来说比较多啊,就是大家最先能想到的肯定就是谁是不是这几个肯定是能想到的对不对,时间,用户、商品这些肯定是能想到的,对吧?那其余的呢,还有啥呀?哎,还有这个地区啊,还有地区,OK,也就说白了是在哪儿下的单,对不对啊,这一点要给他搞清楚完了,除此之外呢,还有谁还有活动和优惠券,也就是说我们这个用户对吧?在下单的时候,那他有没有参与活动,他参与的是哪个活动对不对,有没有用券,用的是哪个券对吧?这其实相当于都是这个,呃,下单这个业务过程的一些环境信息,对吧?或者叫做描述信息对不对?那所以说在这儿他们都应当算作下单这个业务过程的什么东西,就是维度对不对,那其实大家应该能够体会出来,就是我这个这个确认维度的时候,其实是一个比较灵活的一个过程,对吧,没没问题吧,好,那这个确认维度我到底选择谁,这个最终最终是由什么决定的呀,大家说。
03:58
是由我后边的需求决定的吗?其实并不是,这个最终最终实际上是由我们前面的业务系统当中的具体的业务所决定的,对吧?是这样的,OK啊,也就是说我们业务系统当中,我在下单的时候,与下单这个这个这个所谓的业务过程相关的环境信息,它确实就是有这些,那所以说我这儿呢,就能够给确认相应的维度啊,是也是他是跟前边的业务确呃业务系统来的,而不是由后边的需求决定的,这1.1定要搞清楚啊,OK啊,好了,那就是在那儿确定这个维度的时候,你要想选择完整,选择的更全,那一定要对前面的业务有一个更加深入的了解才可以,这一点要搞清楚。行了,接下来我们继续往下走啊,你像后边我们提到咱们支付方式,推单类型这些跟下单就没有太大的关系了,行了,那这个就不再多说了,我们往后看往后看,那这个第三步做完之后,就是最后一步就是确认事实对吧,也是确定度量值,OK,大家可以看到,那对于下单这个一务过程而言,它的度量值是不是还是比较多的呀,对不对,那这里边都有谁,咱简单的看一眼啊,首先第一个就是。
04:58
大单的件数件数,这是不是也是一个数字类型的可累加的一个事实啊,对吧?这个没问题,好接着往下走,下边其实说白了就是各种各样的金额,包括什么金额,下单的原始金额,下单的最终金额,还有中间的是不是各种各样的优惠金额呀,对吧?包括活动的优惠和优惠券的优惠,诶这就是他的几个度量值是比较多的,OK,那除了这些度量值之外,其实这里边也有一个隐含的次数一在里边,对吧?哎,行了,那这就是它的度量值,好,那截止到现在我们这个设计的四个步骤咱就做完了,那它的表结构,那现在心里有没有这个想法,应该大概能猜出来它的表结构是什么样的了啊首先那他的每行所指来的是一个订单明细,说白了就是对吧,那字段呢,是不是会有什么用户ID,时间ID,商品ID,活动ID,地区ID等等,是不是会有这些ID啊,对吧?然后后边再跟上一大堆的度量值,是不是这就应该是这张表的一个最终的表结构啊,就是这样的,好了,那接下来呢,哎,我们把这个加班语句给它拿出来,咱们一起来看一看跟我们设计的是否一致啊好,那往下走找到下单这张。
05:58
条找到之后呢,我们把它的最终的键盘语句展出来,CTRLC。
06:03
来,我放在这个位置啊,呃,来吧,那咱们现在一起把这个东西看一眼,首先我们还是先看它的表名,呃表名呢,叫做DWD是它层,对吧,出的就是数据域ODTL呢,是不是就是那个订单明细啊,对吧?OK,那完事往下走INC,诶,INC又表示它是一个什么增量分区啊对吧?好,那现在我们继续往下看,呃,后边呢,我们就来看一看它具体的行列分区啊,一行就是一个明细,那其实刚才也说过了,这个ID在这其实就是什么呢?I。应该指的是订单明细的ID才对吧?啊OK啊好,那现在呢,我们看它的字段,那字段呢,无非就是两部分呗,维度加不良对不对,那跟刚才我们所设计的咱们对比一下啊,首先先看维度,这地方有什么维度呢?第一个用户ID,这个是第一个维度对不对?商品ID没问题吧?哎,省份ID,然后下面呢,有活动ID和规则ID,其实大家应该能够考虑一个问题啊,就这两个ID有没有必要都在这儿呢?
07:01
有没有必要都在这儿呢?能没必要,这是一个活动I的一个规则ID对吧,那我就告诉大家,其实这里边有一个是没必要在这儿的,有一个是冗余的,要如果让大家选A的话,你说谁是冗余的那个呀,能显出来是活动还是规则。应该是活动ID是冗余的那个吧,对吧,为什么?因为我们的活动维度表对不对,咱们是什么力度,是规则力度对不对,那一会儿咱们是不是可以用它去关联的一个规则表,关联之后里边是不是有活动ID啊,对不对,所以在这儿规则活动,哎在这儿呢,相当是一个冗余的操作,或者在这儿呢,我们也会的,可以管它叫做一个什么呢?叫做一个维度退化的操作,可能大家现在对维度退化这个概念它理解呢,可能有一点狭隘啊,呃,就是前面咱们说过什么情况叫做维度退化来着,就是如果有一个表,我的一个维度表啊,OK,那里边我的这个维度属性特别少,对吧?这个表我不见了,然后呢,我直接给他写到这个事实表当中,那这个操作我们管它叫做维度退化对吧?那其实也不用理解的,非得就是这么想隘,你什么也叫维度退化呢?我只要把任意一张这个维度对不对,它里边的任意一个或者是多个属性我写到实时表,那这个操作我们都给它叫做什么呢?都给它叫做退化,都叫维度退化啊,是这样的,也就是我这个实时表,维度表可能也还在,但是我把里边的某几个维度对吧,我给它写到了实时表。
08:18
可能这个操作我们也管它叫做维度兑换啊,是这样的啊,这个理解一下啊,现在接下来咱们就继续往下看,再往下呢,这也是一个维度,叫做优惠券对吧?那再往下呢,就是什么呢?就是时间了吧,Data塔ID对不对?你看这些维度跟刚刚我们自己所看到那个是不是一样的呀,对吧,就是能够对上了,接来继续往下看,那下边这五个字段我就不多说了,是不是就是度量值对吧?有商品的件数,还有各种金额啊,就不再一个一个去说了,OK,那现在到现在为止呢,咱们的维度外建看完了,那我们的度量值也就看完了,那中间呢,是不是还剩下一些字段对吧?首先一个可看这个其实就是指的一个具体的下单日,下单时间吧,对吧,这是一带那个十分秒的这个理解一下好,那接着往下走,这仨字段,这时候还是那个来源。
09:02
对不对,这个来源跟我们之前在讲加购那张时表的时候所看到的来源是一个意思,对吧?那个来源只是什么来源来着,是那个操作的来源,对吧?你是通过自己搜索哎去架构的,还是通过这个智能推荐去架构的,对吧?那这个来源跟刚才那个是一回事儿,那这个咱们就不再多说了啊,那也是在这儿,这些也应当是算作一个维度吧,对不对,是不是也是退化进来的维度,相面于事,哎,这个理解一下就行了,好了,那这个字段咱就都说完了,相对也比较简单,好了,行列都完事了,最后明确一下分区,那它的分区我们看到INC就应该知道它是怎么规划的了,对不对?就是咱们现在达成一个共识啊,我们做好一个约定,就是以后呢,我们只要说增量分区,那咱们就得反应过来,它的分区应该是什么样的呢?也对,应该是每天一个分区,然后呢,每天的分区里放的都是当天产生的,是不是操作记录啊,对吧?啊是际啊,当然对应到这张表来说呢,那他每天的分区放的就是当天的,是不是下单明细这个操作记录啊,对不对,这也搞清楚以后,我们就不。
10:02
出这个事了啊,只要说到增量分区都指的是一天一个分区,每天的分区存放当天新增的操作记录,诶这个大家咱咱大家一定要反应过来啊,行了,那现在行列分区都完事了,那表结构呢,咱就算是完成了,来完成之后视频我给他停一下啊。呃,来吧,各位同学,那现在呢,我们再来练习一下啊,就是这张表它也是一个事物时表对吧,其实所有事物时表呢,他的见表逻辑,他在写三个逻辑基本上都差不多对吧,那现在我们现在再练习一下啊,来咱们练一练吧,你说他的数据状态我应该怎么去做。对吧,就是我在写这个字的时候,咱们大家一起思考对吧,相当于我写一遍你就写一遍对吧?啊,来吧,分析分析吧,怎么去做数据状态,先得分析呗,这个是得先分析,先分析什么呀?还是老规矩,你要想去给他做数据让来,那你是不是得先分析数据从哪来,到哪去啊,对吧,还是那个流向啊,OK,那你分析分析吧,数据从哪来,数据从哪来,首先得明确咱这张表所对应的业务过程是不是下单对不对,那你要想拿到下单的操作记录,你首先就得知道下单这个业务过程是不是会对哪些表产生影响啊,对吧,对谁产生影响,那咱就从哪去拿数据吧,对不对?OK,琢磨琢磨对谁产生影响,其实下单这个业务过程对谁产生响,咱们之前是花过一点时间准确的详细的去说过的,对吧,咱们应该分析过他会对谁产生影响来着,里边可能有谁有。
11:25
Order info还有谁?Order detail还有谁来着?对,还有两个表,一个是活动与优与订单明细的关联表,还有一个呢,是优惠券与订单明细的关联表,这些大家应该还有点印象吧,对不对?OK啊,那这个我记,我记得之前咱们是打开过一个这个采集项目的文档,咱们现在打开再看一眼,因为那个表确实可能比较多啊,咱们再打开再看一眼。然后呢,在打题的过程当中,咱们回忆回忆啊,下单到底是如何对那几张表产生影响的啊来我这儿再开一个PPT来,咱们把这个呃,前面这个东西打开,其实咱们这个数当说实话啊,做完之后你会发现它其实并不难,但是大家做的过程中可能会觉得比较,呃比较费劲,它费劲费在哪儿呢?其实主要是表多,然后大家对这个表呢,熟悉程度不够深,对不对?那所以可可能会导致大家觉得这个有点难,那其实并不难啊,所以咱们以后做哪个的时候,我会带大家去看看这个表,好,那这其实就是我们前面提到的下单是不是,呃,就是相关的一些表啊,对吧?好,那下单这个业务过程对不对,到底会对谁产生影响呢?到底产生什么样的影响呢?来回忆一下具体会对谁产生影响。
12:33
获得后会受影响,它是不是也会受影响,那这两张表是不是也可能会受到影响啊,对吧?诶一共其实主要就是这几张表好了,那现在我们再明确一下,那下单到底是怎样对这几张表产生影响呢?到底怎样产生影响?着急在产的影响,比如说我这有一个人下了一个单,对吧,这是不是就是一个下单的操作对不对,那这个操作对这张表,对这些表产生什么样的影响。是不是?首先order INF for是不是会新增,会叫做INSERT1条数据对不对?那order底下有明细呢?会怎么样?会也会insert对吧?但是它不是INSERT1条,它不是可能会因色条N条啊,对吧?好,那到底几条是不取决于你这个订单里边有几个商品项啊对不对,它也是音色的,那这两张表它要变的话怎么变呢?其实也是in色的,假如说我这里边有一个明细参与了一个活动,好,那这张表里边就会insert是不是一条数据啊,对吧?那是这样的,那再比如说假如我这个明细我使用了一购券,那这张表里是不是就会in色的一条数据,对不对,它也是in色的,当然它也可能会不变啊,好了,那这就是咱们这个下单的业务过程所影响到的这几张表,以及相应的影响逻辑,那从这大家应该能够感觉出来,就是下单这个业务过程,它影响的表是不是要比之前咱们讲的那个加构要多呀,对不对,但是你再琢磨琢磨,你会发现,那虽然它影响的表多,但是它影响的逻辑并不复杂,你会发现啊下。
14:00
但对他们的影响只有什么?只有音三的是这个道理吧,那你你那个架构虽然影响的表少,但是你影响的逻辑复杂,你有的是音三的,你有的是update对不对?那所以说你你将来再去找那个加构操作的时候,那个逻辑是不是就比较复杂,那一会儿咱们这儿去找那个下单的操作的时候,逻辑应该相对比较简单,我们只要什么类型的就行了,Insert类型的操作是不是就OK了,对不对,这一点大家应该是能够想明白的啊好了,那接下来呢,咱就继续完就行,那到现在呢,咱基本上就明确了啊,就是说我们应该从这几张表当中去寻找咱们那个下单操作,对不对,没问题吧,诶,这一点要搞清楚,行了,接下来咱继续往进行,那在找的时候呢,我们其实在这儿同样要区分一个首日和每日的一个操作,为什么呢?你想啊,就是咱们数仓上线的第一天,在业务系统当中,这些表里边肯定都已经有一些历史数据了吧,没问题吧,历史数据,那我们是不是需要在第一天的时候做一个全量同步,然后呢,对它进行一个统一的初始化的处理啊,对吧?哎,也就这是我们需要做一。
15:03
就首日的操作,那到了后续第二天呢之后呢,我们就不需要再做处理历史数据了,我们只需要干啥就行,是处理当天数据就完事了,对吧,所以他也会也会有一个首日和每日之分,咱们也得写俩词扣啊是这样的啊好了,那一会儿呢,咱们就去分析分析这个三具体怎么写来视频我给他停一下啊。
我来说两句