00:00
呃,来各位同学,那接下来呢,我们要做的工作呢,就是确定一下我们这个商品维度的是不是表结构啊,对吧,有行还有列,那现在咱们一起来看一下,呃,我们就看着这个,看着刚才咱们那个关系图去去说吧,来就看他说吧,OK。那这就是刚才我们找到的与商品维度相关的这一对表,对吧,有他啊,还有他俩。没问题吧,那接下来大家是不是就得去明确一下,我们将来这张商品维度表的行还有列了呀,对吧?大家说每行应该怎么确定啊,每行是不是由这个主页表确定对吧?那主位表一行不是就是一个SKU对吧?那所以说我们商品维度表一行是不是也是一个SKU啊,对吧?这个很简单好,那列呢?列其实是不是就是从这一大堆的表里边去拿就完事儿了呀,对吧?OK,我需要拿SKU的这个字段放在这张表里,需要拿s puu的分类的,品牌的都放在这儿,那还得拿谁呢?还得拿那个平台属性和销售属性是不是也放在咱们这张表里,对吧?那行和列是不是就这样的一个确定方式对不对?那在这儿呢,我们就不再一个一个去比划了,那接下来咱们怎么样呢?直接把它最终的那个建表语句拿出来,咱们去看一眼就完事了。好了,那现在我们打开这个数据仓库的文档,找到商品维度的建表语句,咱们拿出来CTRLC来之后呢,我们放在这个位置啊,好了,那现在咱们一起来把这个商品维度的建表语句给它看一下,首先我们还是先从表名看起吧,表名呢叫做dimsku负对不对,那这个一看就是一个每日全量快照维度表对吧?好,那接下来我们继续往下进行,那下边呢,是不是就可以去看它的行还有列了呀,对吧?我们先看行啊行,那这个每行来的是一个SKU,那这个ID就是SKID对吧?好,那下来我们看字段啊,这个字段。
01:41
看到我们其实可以对照着跟哪去看一下啊,是不是跟ods层那些表对照着去看一下啊,对吧?呃,OK,那现在呢,我们,呃大家都知道,就是我们这张表的字段呢,主要会来自于什么?SKU puu那些东西,对吧?那现在咱们大致的对照看一下,首先我们先找一下ods层的那个SKU对吧,找到SK是不是应该是这个呀,对吧?好,你点开,点开之后这里边是不是有这么多字段,你会发现啊,实际上我们前边的这些字段主要是来自于哪呢?
02:09
是不是主要是来自于SKU的呀,对吧?包括什么?包括ID,商品的价格,SKU的名称,还有这个SKU商品的描述,重量,是否在售等等等,这些其实都是来自于咱们的这个SKU这张表,OK,那接下来我们再去往下看,那下边是不是还有一个po的name和ID啊,对吧?那这些主要是来自于哪的呢?那肯定是来自于s po的呗,对吧?你打开应该就能够看到,那当然了,我们这里边有一些信息并没有给他诶拿过来啊,比如举个例子啊,那我们这里边有一个什么description对吧?第层这是一个什么东西,实是一个文字描述信息,对吧?这个其实对我们分析统计而言,是不是可能意义不是特别的大呀,对吧?那所以在这儿呢,我们就没有把这个字段拿过来,当然你把它放在咱这个表里,其实也没啥事,放在这儿也没事儿,就是多存点数据吧,对吧,这个理解一下啊好了,那下来继续往下进行,下边呢,这几张表应该这几个字段咱就不用对照着看了,应该非常非常明确,这就来自于哪呢?三级分类呗,对不对,这个不多说啊,那下边这个呢。
03:07
品牌呗,这也没啥可说的吧,对不对,那接下来往下走,在这儿还有两个字段,这两个是什么S k.Y6 SK Co co6,这一看就是什么呀,是不是就是SKU的平台属性和销售属性啊,对吧?诶那是这样的,那他俩来自于哪张表呢?是应该来自于那个什么SKU跟平台属性值和销售属性值的关联表啊,对吧,应该是哪张的,咱去找一下啊,应该是ods层的SKU这个。这是SKU跟平台属性值的关联关系吧,这个是SKU跟Co是不是销售属性值的关联关系,对吧?来自于这两张表啊,是这样的啊,然后呢,这里边儿我们应该大家能够发现一个小细节,什么小细节呢?就是这俩表,这俩字段啊,它的类型跟其余的字段相比是不是有点区别呀,对不对?OK,那现在呢,咱们就来分析分析,就是为什么这俩字段咱们的类型要设计成这样,哎,我们先来把这个字段给他熟悉熟悉啊,这是一个什么类型的字段呀?
04:10
这是一个结,还不是一个单纯的结构体,是一个结构体数组吧,对不对?最外能数组里边它是一个结构体,那结构体的字段你看看是什么,我们先看一下上面的这个平台属性的啊,平台属性里边这个结构体的字段都有啥字段,一个是at t ID是不是属性的ID,一个是value的ID,这是属性值的ID,对吧?那还有一个是什么呢?是AR内是属性的名称吧,对吧?那这个呢,是属性值的名称。啊,是这,诶,也就是我们这一个结构体是由这样的四个字段组成的,对吧?哎,那你琢磨琢磨,这四个字段他们对应的应该是这个商品的一个什么,是一个平台属性吧,是是这个道理吧,OK啊,因为啥呢?因为你这个AR name存的就是你那个相当是属性的那个K吧,对不对,那你这个Y6NAME相当存的是那个属性的是不是Y6啊,对吧,是这样的,那完了之后这个A加ID指的就是你那个属性名称,也就是K的ID,那Y6ID指那个值的ID吧,啊就是这么个,也就是说实际上一个结构体,那我这里边呢,就相当于是一个平台属性的KV啊,是这样的啊,OK,好,那这就是咱们这个,呃,平台属性还有销售属性,他们这个字段的类型,那在这儿咱为什么要这么设计它呢?
05:27
这个其实能够对应到我们前面的哪个知识点。这两个所谓的平台属性,销售属性,这属于是什么?多值属性嘛,对不对?咱们之前在讲那个维度表的设计理论的时候,是不是提到过一个多值属性的概念啊,对吧?什么叫多值属性来着?来,那咱们现在打开之前的文档,咱们去找一下啊,找到前面的设计理论跟前面对应一下,是不是在这儿啊对吧?多值属性呃,这是多值维度啊,多值属性什么叫多值属性来着?其实如果维度表当中某个属性,也就是某个字段下边的,对吧?有多个值,我们就称之为是多值属性,对吧?多值属性咱们通常是怎么去存储的来着?两种方案,第一种方案呢,就是将你这多个值我就放在一个字段里边,对不对?当然你放下之后呢,你至少说得是这种KV建隔段的形式啊,对不,这是一种形式,这是一个方式,那还有一种呢,是啥呢?诶是将多个属性值放到多个字段,那每个字段是不是对应一个属性啊对不对,那咱这儿采采用的显示是哪种方案呀?显示第一种方案就是为什么我们这没有采用第二种方案,哎,对,很简单,因为我们不同的SKU它有几个平台属。
06:33
行,这个是不是不确定啊,对吧?有的上面有五个,有的上面有三个,这个你没法给他,呃,把一个属性放在一个字段去存储,这个呃,不好设计对吧?OK,所以在这儿呢,咱们更通用的方案呢,应该是将这多个属性值放到一个字段,对吧?那现在关键问题来了啊,咱们确实是放在一个字段了,对吧?那我们这个字段的类型为什么最终选用的是这种方案呢?我用别的方案行不行?对不对,我不用这种类型行不行。
07:01
我不用任何,我用别的类型行不行,对吧,其实你只要能够把这个KV建构存下来是不是就OK啊,对吧?好,那我用别的类型行不行。用别的的型行不行,行吧,对不对,OK,那比如举个例子啊,那这是不是就是我们最终要存的一个KV点,对啊对吧,我这个我用map存行不行,Map存行不行,Map其实可以吧,对不对,你要存map的话,那谁作为K呢?是不是属性名称作为K,谁作为值呢?是不是那个呃,就是属性值就作为咱们这个map里边的value啊对吧,OK,好,那我这个是不是就能够呃把这个就是同一个商品的多个平台属性是不是放在同一个map里吧,对吧,而且不管我这个SKU有几个map,有几个平台属性都无所谓,对吧,你假如说诶我这个SKU有五个平台属性,那你就是你你map里边你就有五个呗,有五个K位电轴对吧?那如果你这个商品如果有三个平台属性呢?那你这个map里边是不是就三个K位电桩对吧,但是他们是不是总体来看都叫map,是不是都可以放在一个字段里边,这个首先应该是没啥问题的,诶但是用map呢,也有它不太好的地方,哪不好呢,是不是还是我这个值的类型,哎,就固定下来的对吧,我可能有的这个平台属性的。
08:09
值它并不是字符串来赢的,对吧,我都用字符串存可能就不太合适了,是这样的啊再一个呢,就是说如果你用map存,你只能把那个属性名称跟值的名称存下来,对吧,我还我比如说我想存一下那个属性的ID跟值的ID,我这个能存下来吗?是不是就没法存了呀,对吧?啊,就没法存了啊,是这样的,所以在这儿呢,我们考虑到这两点,一个是它保存的信息比较有限,再一个呢,就是说它的这个类型那就是不太合适了吧,最终我们其实并没有采用麦,我们用的是什么呢?用的是结构体数组,是结构体数组,OK啊好,那在这儿我们为什么要用结构体数组呢?给大家分析一下啊,首先我们需要明确的是,咱那个结构体数组当中那一个元素是不是就是一个结构体啊,对吧?我们的一个结构体对应的其实就是一个KV建筑对吧?没问题吧?OK,好,那我们里边一共有四个字段,分别是属性名称的ID,属性值的ID和属性名称,还有值名称对不对,咱是不是一共这样的四个字段,那这个四个字段,我里边存的东西都是什么呢?很简单,OK,那假如我们就对应到这样的一个这个平台属性上来啊,OK啊好品牌应该是咱们这个属性的名称嘛,对吧,我是不是就放在这个名称字段后边对不对,OK,那这个华为是不是对应的属性的值对。
09:27
啊,那我OK,我就放在这个value name值的后边对不对?那我上面是不是还有俩字段,一个是品牌的ID,一个是这个华为的ID,是不是就放在上面就完事了,对吧?OK,那这就是我们,哎这一个结构体里边保存的内容,好那我外边为什么要放一个数组呢?很简单,因为是不是一个SKU可能会有多个这个平台属性啊,对吧?那多个平台属性,那我就给它放在一个数组里边,而且我这个数组的长度是不是可以是任意的呀,对吧?那这样一来我就能够去适应或者是满足不同的SKU了,对吧,你是有五个这个平台属性也好,还是有八个平台属性也好,没没关系,我是不是都可以放在一个这样的数组当中,对吧?就是这样的一个类型设计是能够满足所有的SKU的,这一点咱要理理解一下啊,所以最终最终那咱们这儿呢,就是这样去设计这两个字段的类,行了,这个大家稍微的体会一下就行了啊好了,各位同学,那截止到现在呢,那咱们这张表的列基本上也就都说完了,那其实呢,我们应该能够看出来啊,就是咱们这里边绝大多数的列是不是都是。
10:27
取自于咱们那个所谓的主维表相关为表了呀,对吧,这个稍微再注意一下就行了,行了,那行列都清楚了,最后明确一下它的分区规划啊,大大想想,你说这张表的分区规划应该怎么做啊?分区规划,你要知道咱们这是一个什么每日全量快照表啊,对吧?那所以他的分区规划那基本上就明确了,对吧?那应该怎么怎么规划,是不是就是一天一个分区对不对?那每天的分区里放的是什么呢?是不是就是当天的全部的这个商品维度的信息对不对?OK 14号我要放14号的所有商品,那15号的时候呢,我是不是得放15号的所有商品,对吧?当然15号里边你说会不会包含14号的某些商品信息呢?是会的,对吧?因为有可能比如说我14号的一个商品,我到了15号我没有发生任何变化,你就是没变,我到15号我是不是也要再存一份,对不对,OK,是这样的,这就是咱们这个,哎,商品维度表的分区规划好了,那截止到现在,那这张表的行列分区咱们就都明确下来了啊,大家好好体会一问啊,就是咱这张表的表结构到底是怎样一步一步来的,其实主要就是依托于主维表,相关维表对吧,根据它来的啊,好了,接下来继续往下进行,由于这是我们dim层的第一张表啊,那所以说我们。
11:40
需要去看一下,就是它的这个数据的存储格式,因为DM层是不是跟ods层的存储格式不一样啊,对吧?来往下看看这怎么写的,那首先呢,这里边我们会有一个stores orc,对吧?这个我们并没有去写那个什么RO ma,还有什么那个input ma out ma,对吧?那大家是不是应该已经知道为啥呀,是不是你这么写它就相当于是你那么写呀,啊对对,咱们上午已经看过了,我就不再多说了啊,这是orc文件,然后接下来往下走,下边呢,我们还加上了一个table properties,也就是这个表的参数,那里边我们指定了什么,是不是orc的压缩格式,orc.compr等于snap,诶那这样一来的话,我们这张表下边存储的文件就是orc列式存储的文件,以及诶这个snap压缩的一个格式啊,这个大家理解一下行了,那到目前为止呢,咱这张表的建表语句就算是,诶说完了来我把视频停一下啊。
12:30
嗯,好,各位同学,那现在表结构有了,那接下来我们要做的工作就是数据装载了啊,OK啊呃,这个表的数据装载我们就不能说再只执行一个简单的漏的语句就完事了,对吧?这回我们得写什么样的circle,就最终咱们这个circlel语句写完之后应该是一个什么样的结构呢?不肯定就是一个insert加select的一个结构啊,是有道理吧,对不对?那我们select你from哪呢?应该是from ods层的表对不对?那in色在哪呢?肯定是in色到这张表对吧?但是呢,我们不能说仅仅就局限在in色到这张表里啊,你得指定具体的什么呀,分区吧,是这个道理,我你们,哎这个一定要搞清楚,所以说咱们再去写这个circle之前,咱们必须得先明确一下,就是我select到底从哪张表select对吧,我insert到底inser到这张表的什么分区对吧?哎,咱得搞清楚,就是数据从哪来到哪去,咱得先搞清楚,也就是说,呃,说白了就是什么,就是这个数据的一个,呃,可以说是一个流向嘛,对吧,数据是从哪张表,呃,流到了咱们这个,诶这张表里边对不对?那现在咱们先把这个问题分析分析,那接下来呢,咱们先明确数据它从哪来,数据从哪来啊,来说其实就是从ods层对不对,是不是与这个商品维度相关的那一堆表里边来啊,对吧,比如说OD s SQ in份对不对,比如说ODSSQ印份是不是就这一大堆东西啊,对吧,那一个一个咱们一去找就完事了,这是。
13:56
这来对吧,但是你要知道就是我们找到的这些表,比如它那比如什么PU等等,这些其实都是什么表,都是分区表的对吧,对不对,而且都是以什么为后后缀的,都是以负作后缀的,也就他们都是每日全量表,相当于是没错吧,那我们从这张表里取数的时候,对吧,你说我是每天都取他整整张表的数据吗?还是怎么的,对吧?你想啊,这个像这种表下边不是以后每天下边都会有一个分区啊,对吧,他一天一个分区,一天一个分区嘛,对吧,那你说我们每天往这张表里装载数据的人,我是拿ods这张表的全表数据吗,是吗?
14:36
其实并不是对吧,你只需要拿什么就行了,是变化的吗?其实只要拿它当天的分区是不是就够了,是大家说是不是这个道理,是这个道理啊,那所以我们其实给大家明确一下,就是我们往这张表里去做这个数据装载的时候,我们每天要做的工作就是什么呢?就是从ods层的与商品维度相关的这堆表里边去获取它当天的分区啊,那那那些表当天的分区里存的存的就是什么,是不是存的就是截止到现在全量的这个与商品相关的这个维度信息啊,对吧?那我们拿到之后对它进行一个整理对吧,进行一个处理,处理完只到之后呢,你就能得到一个什么,得到一份是不是截止到今天的全量的SKU的维度信息,对吧?那你把这个全量的维度信息拿到之后,是不是得写到这个商品维度表对吧,那写写到这个表的哪个分区呢。
15:31
是不是就是当天的分区,没错吧,因为我们这个商品维度表,我们是一个每日全量快照表嘛,对吧,你拿到了一份今天的全量信息,那你不就得放到咱们这个维度表今天的分区当中嘛,对不对,那这实际上就是咱们这个维度表的一个数据状载的流向,OK啊,最终总结一下啊,也是我们每天要做的就是OK,先找到ods层与商品维度相关的表,然后呢,拿到当天的分区的数据,而不是这些表全表的数据只拿当天分区啊,拿到之后呢,我们对它进行处理,处理完之后呢,写到咱们这个商品维度表是不是当天的分区里边啊,对吧,应该是这样一个逻辑啊,OK啊,好,那你琢磨琢磨,咱们每天往这张表里装载数据的逻辑是不是应该都是。
16:11
一样的,大家说是不是一样的,其实是一样的,比如说你14号的人,你就是拿ods层14号的分区,对吧?写到这张表14号分区15号的时候呢,是不是还是拿15号的分句,然后写在这15号的分区啊,对吧?虽然分区不一样,但是处理的逻辑是一致的,每天都是相同的一个逻辑,所以在这儿呢,我们去写这个装载语句的时候呢,我们就不需要把每天的都写一遍了啊,咱们就只需要写一个是不是就完事了,对吧?OK啊,那在这呢,我们就还是以谁为例呢?咱们就以呃,6月14号的数据为例啊OK,那在这呢,我把这个标题先写一下数据状载,然后这个呢,应该是2020杠零六杠幺四,这就是我们假定当前的一个日期啊好,那接下来呢,咱们就开始去把这个circle写一下啊。啊,好了,各位同学,那接下来呢,咱们就可以正式开始去编写这张表的数据状态语句了,那首先呢,我们需要去,呃,是不是得先拿到我们这张表所需要的今天的这个数据啊,对吧?那咱们都知道就是这张表里呢,我是不是一大部分的数据是SSKU的,一部分是s puu3级分类品牌,还有平台属性,销售属性啊对吧?那我们现得怎么办呢?是不是应应该能看他们是来自于不同的表的对吧?那所以我们得先怎么办呢?是不是得先写一些子查询对不对,分别获取每张表的字段,最后呢,是不是再给你们拼接一下啊对吧,才能得到最终的结果。好,那现在咱们先分开写,先写子查询,首先呢,第一张表呢,我们大家都想的是不是就是SKU那张表对吧?来首先我们来自应该是哪张表呢?Ods层的SKU是不是in for负这张表啊,那这张表它是不是分区表,那我们是不是不能拿全表,我们应该只拿当天的分区2020,哎,然后呢,这个杠零六杠幺四没没问题吧,好,那这里边我们应当拿哪些字段呢?那其实在这儿呢,我们可以先把。
17:54
它里边所有的字段都拿出来啊,在这儿呢,你选个ID,然后你往下呃走一个,那这其实就是这张表的全部字段对吧?那在这儿呢,我们尽量不写写代星啊,咱把这个字段都给它列出来好,那这个横着看不太好看,我给它竖过来啊来,咱在这呢,给它调整一下CTRLV,那直接搜一个这个逗号就行,你搜个逗号,然后呢,全部选中,全部选中,怎么选中,这是不是要翻到out啊对吧?那或者说你也可以按alt加entert对吧?Alt加回车选中选中下按一下右就行啊,那之后呢,你直接诶回车就给它输过来了,OK啊,那这边我们CTRLC拿过来,拿来之后呢,给它放在这个位置,那这个往下走CTRLV好,那这样一来的话,我们就已经拿到了我们所需的,是不是所有的这个字段了呀,对吧,好拿到之后我们接下来呢,继续往下进行,但是这里边其实有一些字段我们是用不着的啊,比如说谁用不着。
18:42
你像这个什么SKDC,这是不是那个什么商品的描述信息啊,对吧?这个我们其实是不是不需要它呀,对吧?诶有没有啊有啊有有就给它留着吧,其实这个有没有无所谓哈,但是这个东西就是对分析而言没有太大的作用啊,有有都行,那有咱们就留下来啊,尽量往下走,那这个其实肯定是没有的,这个放的是什么呢?是SKU default什么image,这其实就是那个商品的图片的一个地址,对吧?那这个对于分析来说肯定更没用了,对吧?所以在这儿呢,我们就诶不要它了,这个我们最终的表里边其实也没有这个字段啊,好了,那这样一来我们留下咱们必要的字段就完事儿了,那接下来咱继续往下进行啊,看家下边我们还需要拿哪些信息啊,来谁来from跟另外一张表的对吧?那下边这这些字段应该是来自于哪的,来自于SPU的对不对?好,那现在咱们去拿一下我们所学的字段啊,谁来的from谁,呃,Ods层的SPU是不是in啊对吧?好,那完之后呢,在这我们就来一个DT等于2020杠零六杠幺四也是。
19:43
赔是全量,我是不是也是拿到十四二的全量就够了呀,对吧?好,那现在呢,我们继续往上走,那这里边最最关键的一个段,其实就是那个po name,但是除了拿他我们还得拿一个谁啊对,你还得拿一个ID,对吧?为什么要拿ID啊,因为一会是不是得用SKU这张表里表的s po ID去关联它的ID啊对吧?这个一定要注意啊好,继续往下走,那他完事之后该拿谁的,该拿这个分类表了,对吧?分类表我们从三级分类开始啊,那现在呢,我们select一下,然后呢,装哪张表应该是ods s,呃,应该不是S了,应该是base斯吧,Base category不是三亚对吧?那这张也是全量表,全量表我是不是也是拿它当天的一个分区就够了,对吧?零六杠幺四先拿过来,拿来之后呢,我们继续呃,往上进行啊,那上面呢,我们需要拿出来的什么信息呢?首先一个就是name幕,对吧,先把这个内幕拿过来,呃,N na me,诶,OK,那除了name还得拿谁,是不是也也得是拿一个ID呀,对吧?那为啥拿ID呢?大家观察是不是这也有一个三级分类ID一会要跟他关联呀,对吧。
20:43
这个很简单,好,那继续往下走,那下边我们说还得拿一个那个二级分类啊,对吧?好,二级分类这边我应该怎么拿呢?其实很简单,我把那个三改成二是不就行了,对不对,但是你要注意一下啊,我这个SKU表里边有二级分类的ID吗?没有对不对,那我怎么跟这个二级分类表关联呢?
21:04
这个怎么关联?哎,其实看见怎么关联,是不是看一下咱们之前那个表关系图就能看出来,对吧?咱是SKU跟三级关联,三级跟二级关联对吧?所以说是不是肯定是三级分类表当中应该有一个二级分类的ID啊,对不对?那有没有呢?其实是有的,你看往下走,这是不是有一个二级分类的ID category2id啊对吧?诶,这个其实应该是能想明白的,那同样的道理,你说二级分类表里应该会有一个什么一级分类的ID吧,对吧,这个应该是能想明白的啊好,那接下来我们继续往下走,那三二是不是该一了,对吧?这个我们改成一,那一里边肯定就没有其他分类的D了,它已经是最高级的分类了,对吧?好了,那这样一来的话,这三张表咱也就搞定了,这都非常简单啊,好,继续往上走,呃,这回该谁该这个所谓的TM了对吧,也就是品牌,那咱们现在拿一下品牌啊,OK,那现在我们s SE c select,然后往下走来一个from,应该是ods层的,是不是base啊对吧?呃,应该是trademark对吧,它也是一个全量表,全量表我们应当拿它是不是特定的一个分区就够了对吧?拿过来CRLV。
22:04
好,那接下来呢,我们继续走啊,那这里边咱们拿什么字段,是不是也得先拿一个name对吧?哎,叫做TM内,那当然里边这个这个ID是不是也得拿对吧?叫做ID拿过来好了,那这样一来的话,我们这几个字段就全部都拿到了,好拿到之后咱接下来继续往下走,下边该拿谁了?下边是不是咱们就该拿这个SKU at.VALUE6跟SKU Co at.value来对吧?平台属性,销售属性,诶这个咱们怎么拿?就这个怎么拿呢?咱们先不用着急,咱先来明确一下,就从哪张表拿对吧?这应该来自于哪张表,这边是来自于ods层的这个什么SKU at加Y6负这张表啊,对不对,也就是SKU跟平台属性值的关联关系,那张表对吧?好,那现在我们写大一下啊,完之后呢,我们from那张表,让ods层的SKU流负这张表,它也是一个每日全量表对吧?那所在这呢,我们也需要先拿到它,是不是这一天的分区就行了,对吧?2020杠零六杠幺四,诶这个先搞定,搞定之后呢,那咱现在继续走,那我们需要拿它的什么字段呢?
23:11
需要拿什么字段,那这个是不是取决于我们将来需要啥字段,对吧?实际上上在这儿我们要的是什么?是每一个SKU的每个平台属性所对应的AIDID是不是这些是必须得拿到的,对不对?那咱现在呢,就去拿一下啊,OK,那在这儿呢,我首先我先拿一个a trid,这里边有没有有at t name也有它冗余了,对吧?啊,再来一个,呃,咱这样吧,按照顺序来吧,那文那个上面的顺序是不是先拿那个value ID啊对吧?那我们这也是按照这个顺序来value,呃,ID,好,那下边是AR name,再来一个value是不是name对吧?好,咱把这四个字先拿出来,诶光拿这四个字行不行。不行,你不知道你拿出来之后是不是只有属性跟属性,呃,值啊,对吧,但是哪个SKU的咱们知道吗?不知道,所以将来你是不是得用它跟上面关联呀,对吧?所以说你这还得拿一个SKU的ID出来才行,对吧?好,那现在呢,我们把这几个字段查出来看一眼好了,那现在那咱这个数据就已经拿到了,对不对,那拿到之后,我们现在这个数据能不能直接去跟我们上边的什么SKU进行关联,能不能这个能不能直接关联,这个应该是不行的,对吧,为啥不行,因为你要知道啊,我们上面这个建表语句当中是怎么规定的,我们要求是不是同一个SKU的多个平台属性得位于一个这样的结构体数组吧,对吧,那咱们现在视结构体数组吧,这个结构并不是对吧,那咱们当前的这个数据的结构长这样,好,那这个结构到底是什么样的,咱们现在熟悉熟悉啊,熟悉成这个结构,这个结构不就熟悉它的行还有列吗?对吧?这张表现在一行指代的应该是一个什么呀。
24:52
因一行应该是一个SKU的,是不是一个平台属性啊,对吧?没问题吧,咱们看能不能看懂啊,比如说这个以它为例,那这一行指的是什么?是一号商品对吧?OK,那它的机身内存是128g 128G这是一个属性的名称,这是一个属性的值对不对?那这个ID是谁的ID,是不是就是机身内存的ID,然后这个呃,Y6ID呢,是不是就这个128G的ID啊,对吧?OK,那这就是一行数据代表的实际上就是一个s ku的一个平台属性啊,OK,好,那我们最终要求的是什么来着,我们要把同一个SKU这一看,是不是这些平台属性就属于同一SKU对吧?同一个SKU的,诶多个平台属性得给他放到一个结构体数组里边。
25:38
对不对,这是我们最终想要实现的效果,对吧?好,这个怎么实现,我们现在是不是要把这样的一个结构转成咱那个结构体数组啊,对吧?好,想一想这个怎么做,也就是我们现在需要通过一个circle去构造一个结构体数组出来,对吧?好,那怎样去构造这个复杂数据类型,大家还有印象吗?我们今天上午是不是已经带大家复习了一下了,对吧?OK,那现在我再把那个笔记打开,咱们稍微的回忆一下啊,OK,那这里边呢,我们要想构造一个array,我们可能会用到array函数,Split函数,什么S函数,对吧?这是不是都能得到A瑞啊对吧?那map呢,咱这其实没map,我们主要就是速度跟结构体嘛,对吧?然后接下来就是结构体,结构体是不是可以用name的supply呀,对吧?好,那现在这个构载函数就摆在这了,那我们怎样去写这个circle考能把这个数据转成咱们想要的那个结构先先怎么办?
26:32
先先先转谁先转name的,先使用name的ru干啥?是不是去把一个平台属性给它封装到一个结构体当中啊,对吧?诶你会发现实际上咱这儿拿到的这四个字段是不是就正好对应那个结构体的四个字段,对不对?我可以先把这样的诶四个字段诶给它分割到一个结构体,那这个是不是也给它分割到一个结构体对吧?依次类推一行,我是不是给它放到一个结构体啊对吧?那接下来怎么办呢?接下来是不是还得把属于同一个SKU的这多个结构体放在一个数组里啊对吧?这个怎么实现呀?
27:08
分组聚合一下是不就行,对吧?我们按照谁分组呢?按照SKU分组对不对?那完事之后呢,是不是对这个结构体进行一个collect赛聚合就完事了对不对?那这个效果就能出来啊,是这样的啊,所以大家这块呢,反应还是比较快的,那接下来呢,咱们看看这个circle到底怎么去实现啊来,那现在呢,我写一个that完了之后呢,诶不用再写了,咱就用上面那个就行,对吧?呃,在这呢,我把这里边的字段先全部都删除,咱们是直接就调用谁就可以了,是不是name的ru就完事了对吧?Name的它是一个什么样的函数,是一个一进一出的函数吧,对吧?进来一函数出去一行啊对吧?好,那现在咱们去开始做这个封装的操作啊,这样怎么用来着,是不是先传字段名,再传字段值,字段名字段值啊对吧?OK,然后大家一定要注意,咱现在这个字段名你可不能随便写。为啥不能随便写呢?必须得保证你这个结构体的字段名跟我们表当中对吧,声明的这个字段名得是一致的才行,为什么一定要一致呢?你想啊,就是将来咱们是不是要把这个结果是不是insert到这张表里对不对?然后你要注意啊,就是我们目前这个字段名它已经是作为什么的一部分了,作为这个字段类型的一部分了,对不对?所以说如果你得到的那个结构体,它的字段名跟我这个表里面的字段不一致,那你往里插着的时候,它会报一个什么错呢?
28:28
字段类型不匹配是这个道理吧?啊是这样,这个一定要注意一下啊,因为你现在字段名已经是字段类型的一部分了啊,是字段类型声明当中的一部分了,对吧?所以字段名一定要一致,好,那所以在这呢,我们就得按照上面这个规则来啊,所以第一个字段呢,我叫at t RI下下D对吧?啊,那就拿过来,那是不是还得放着这个字段值啊,对吧?那就是at t rid这个字段的值呗,对吧?好,那接着往下走,后边应该是at t RI下线V6,呃,不是应该是什么来着,应该是V6ID吧,哎,VID啊,那咱们就拿这个VID,你要是不记得这个顺序的话呢,可以啊,照着上面去写啊来,我这记住,我就直接写了,那这个应该是at tr_name对吧?那在这呢,我们给放上一个at tr,诶,Name OK,那下一个那就是该谁了,该这个value_name了,对吧,那我们在这呢,给它放上一个value name OK,好,那截止到现在呢,我们这个结构体应该就算是封装好了,封装好之后咱们查一下看看它是啥效果,走来大家看一眼,你看现在是不是就已经把一个S。
29:28
Ku的一个平台属性放到了一个结构体里边了,对不对,OK,好,那咱接下来呢,就继续往下进行,下边咱们怎么做,是不是得分组聚合了对不对?那在这儿呢,我们就直接在下写一个Y就行,格Y谁格y skudd啊,然后下角线ID,那之后呢,我们再把上面这个name的的这个函数的结果是不是放在一个是不是collect这样的函数里就行了,对吧?Co,然后边我们来一个set,当然有set有例的啊,那这俩有啥区别,Set去虫Li的不去虫对吧?那其实在这儿呢,我们根本就不需要去虫对吧?那作为这俩你用谁其实都可以啊,都都可以啊,那用大家熟悉的set吧,好,那现在我们把它放进去,那之后呢,我们再来重新的执行一下这个词课,那当然这个词儿课呢,我们要执行的话,它需要去走什么呀。
30:17
走计算引擎了吧,你有分组有聚合了,这个是不是就不能直接查了,对吧,他得去走走这个计算引擎了,所以说这边呢,呃,可能要慢一点,因为现在是咱们执行的是不是第一个需要去走计算引擎的server啊对,不需要去启动专业网需要去启动啊,稍微等一会啊,等一会看看这个结果,呃,看看我现在这个资源有没有申请到啊,百度吧,1038088对吧?呃,现在已经申请到这个相应资源了,诶已经跑完了对吧?啊跑完了啊,完之后我们回过头来看一眼啊,那这就是我们最终聚合之后得到的结果,这个结果应该是比较明显的啊,你看现在是不是一行只剩下一个sko了,对不对,他已经把这一个SKU的是不是多个平台属性放到一个数组里边去了,那方括号嘛,对不对,里边是不是有逗号作为这个每个元素的风格呀,对吧?诶已经能看出这个效果来了,行了,那这其实就是咱们期望得到的最终结果啊好了,那这就是所谓的平台属性,OK,那销售属性,你说是不是也可以仿照这个去写。
31:17
这啊对不对,那所以销售属性我们在这就不再重复了,OK,那截止到现在呢,我们就已经把这一大堆的这个子查询,相当于是都写完了啊都写完之后,各位同学你说我们接下来要做什么工作?是不是得把这些字段给他拼一下啊,对吧?好,那现在问题呢,拼的话我们应该用什么呢?肯定是用join吧啊对吧,我不知道咱们班有没有这个,就是基础特别差的工学啊,因为呃,前面的班反正有的班是有的,就是到这个书仓这个环节呢,这个John啥的还不太明白,还不知道John跟union到底是怎么回事,这些东西还搞不清楚,这个说实话不应该啊,呃,要是有类似的这种情况的同学啊,一定要赶紧复习,抓紧时间把这个补一补啊,OK,那显然我们这儿要怎么做呢?你看啊,是不是我们这儿每个子查询都提供了我们最终的结果的一部分字段呀,对吧?那所以说我们是不是肯定怎么样得横着把他们拼起来,对吧?那当然就大白话对吧,横着拼,你横着拼就得用什么呢?用招对吧,你要竖着拼呢,那就用union呗,对吧,这个搞清楚啊好,那在这我们需要做照,那既然是要draw的话,那你首先得先干啥呢。
32:17
理论上首先你得先干啥,是不是得先把这里边呢,是不是每一个这个子大学都给它用括号括起来,起一个别名啊,对吧啊对不对,然后呢,我们再select from,是不是他join他写个连接条件,然后呢,再让他是不是再写个连接条件,再让他再写个连,是不是得这么去写呀,对吧,也就是我们这里边得嵌套是不是一大串的子查询没问题吧?OK,那这么去写这个S的话呢,首先结果肯定是没问题的,但是这个S克就是看起来是不是可读性特别的差呀,对吧,没问题吧?OK,你下边跟了一大串的紫查询,那我这个整个的这个照逻辑可能看起来就不是那么的清晰了,是这样的啊,所以在这儿呢,咱们不那么写了,我给大家介绍一个新的语法,这个新的语法叫什么呢?对,叫做with s,当然它其实是有这个术语的啊,它专业的叫法叫什么呢?啊,叫做cte,注意啊,不叫ETC是ctee啊,这个别记错了啊,Ctee什么叫ctee呢?C在这呢指的是common啊,然后这个T呢,指的是table呢?
33:17
指的是expression啊,就是common table expression,那直译过来呢,我们管它叫做公共表表达式,公共表表达式是这样的啊,那我给大家简单的介绍一下这个所谓的公共表表达式,它到底是怎么一回事啊,这个公共表表达式呢,它的核心原理是这么去做的啊,它会怎么做呢?它会提前把我们这个circle当中的需要用到的子查询声明起声明出来啊是这样,你比如正常时候你写的时候怎么写,是the select from,后边是不是跟上一个子查询啊,对吧?哎,通常是这么写的,但是你用这种所谓的公共表达式,你是怎么做的,你是先在前边提前把这个子查询声明出来,声明起来,比如说我给他诶起一个这个临时临时表的表名,比说管它叫什么呢?哎,就叫SKUOK,那这个呢,比如说叫SKU,那你提前声明,声明好之后,你接下来就可以怎么做了呢。
34:08
就可以直接select from SK select from s PU了,你就相当于是是俩临时表啊,对吧?哎,就这个意思是这样的啊好,这其实就是所谓的公共表表达式,那它的一个核心的逻辑,好,那现在有同学可能会纳闷啊,这东西为啥叫公共表表达式啊?对不对?我这个公共体现在哪儿呢?这里边能感觉出来公共的这个这个这个意思吗?能感觉出来吗?好像体会不到那个公共的这一层意思,对吧?那确实在咱们这儿没有这个公共这一层的意思,那我给大家举一个具体的例子,你可能就能想明白了啊,比如举例子就是咱们在做某些需求的时候,我们可能会用到一个技巧,什么技巧呢?就是字连接对吧?就是自己跟自己去做状对吧?OK,那假如说我现在呢,已经写了一个circle了,对select from某一张表里边呢,选的三个字段对不对?那完了之后呢,我需要用这个结果跟自己再进行一次照,那通常你之前写词或是怎么写的,也说是select from这张表选萨字段,然后下面你还得怎么样再写一遍select的这张表,不是呃,然后写萨字段对吧?之后呢,是不是给第一个表起一个别名叫A,第二一个起个别名叫B对不对?然后是不是再嵌套一他写再嵌套一层自查学谁来from a,是不是join b,然后on什么呀,对吧?正常你要自己跟自己进行关联,你是这么去写的。
35:26
对吧,那相当于我是不是同样的一个自查询,我是不是写了两遍啊对吧?哎,是这样的,那如果这时候我们要是用公共并公共表表达式对吧,就是咱们刚才说的那个所谓的cte这个语法去写类似这样一个S,那你这个子查询就可以只写一次了,对个啥意思呢?就是我先提前是不是来一个这个生命意子查询啊对吧,诶,That from,诶那我这给它写在这了,然后我给它起一个别名,那下边我再让他自己跟自己照,我就可以怎么做了,是不是可以引用这个别名了呀,对吧,哎,直接s select from a,然后呢,诶在呃怎么样?呃,就是直接就是s select from a,然后呢,是不是再照A就完事了呀,对吧,诶是这样的一个逻辑,也就是说在这呢,你就只需要写一遍,那就不用再去写两遍了,诶这就是所谓的公共的意思嘛,对吧,说白了啥意思,就在这儿,你声明一次,我下边可以怎么样。
36:16
可以用多次,对,这不就是很公共的意思嘛,对吧,这是公共表达式,但是在这儿呢,我们并没有说,诶一个子查询我需要用到两边的这个场景,什么时候会有呢?咱们下边诶再去做某一张维度表的时候,就会用到这个所谓的公共的这个意思,到时候咱们再详细的去体会啊,行了,那在这儿呢,我们先,呃把这个公共文表达式这个语法先来熟悉一下这个东西怎么去声明这个子大学择很简单,那首先你需要在最开头的地方写上一个位,哎,就要写一个with,然后后边呢,你需要去起一个别名,呃什么呢,比如说叫做SKU吧,然后再往后呢,你就要写啥。写一个X,写个X啊,那完事之后呢,咱需要干啥呢,把这个东西CTRLX,你给它放在一个括号里边来,CTRLV来放下来就行了,然后呢,这个呢,我们给它往前给它TYPE1下推一下啊好了,那这样一来的话呢,我们就已经倒压了,相当于。
37:05
我相当于把第一个子查询就声明好了,对不对,OK,那下边是不是还有一大堆的子查询对吧?下边怎么声明呢?你就不用再写with了,你就直接就怎么样就行,别名is子查询别名is子查询是不是就这么去写就行了,对吧?好,接下来我们再去往下走,那这个应该是SPU,对吧,我也是先给它放在一个括号里边来,呃,之后呢,给它往前推一下啊,那上面呢,我就叫做SPU,然后S那就完事了,当然这前后两个子查询之间需要用一个逗号进行分隔,对不对,那位子写一遍,然后下边就是别名爱查询,别名爱查询依次往下走就完事了,那我们需要按照相同的方式,是不是给每个这个子查询都起一个这样的别名啊,对吧,那都起完之后,咱接下来就可以干啥了呢,再往下你就可以直接select secret,然后呢,这个往下走from from谁,你就可以from我们前面声明的这一个一个的查询了,对吧,比如说我需要用它跟它进行关联,对吧,你就直接怎么做,哎,直接sit from SKU,然后后边的。
38:06
PU,然后呢,后边再来on什么什么就完事了,就这么去写就OK了啊,那这样一来你想啊,是不是咱们整个so的核心逻辑是不是就在这一小块咱们就能够看全了呀,对吧?但是这个可读性要稍微的高一点啊,行了,那这个我就不再多说了啊呃,当然剩下的我也就不再补充了,因为这个都是重复的操作,我们现在直接把文档当中的最终的这个circle拿出来,咱们一起看一下就行了啊,这个相对也比较简单了,往下走,其实这个circle课当中最核心的逻辑就是啊,是不是就是获取那个结构体数组啊,对吧,就是那个还有点意思,别的都比较简单啊啊这个拿过来,那在这儿我就把我写的东西全部覆盖掉了啊CTRLV,好,那现在我们看一下这个最完整的这个circlel语句啊,来往上走往上走,那首先我们看这他这是不是先用了一个VS,是不是声明了一个SKU的子量,跟刚才咱写的是一样的啊,那接下来就是s po啊,然后这个等等等,这个我就不再多说了,直接往下走往下走。你看来到这个最底下啊,这他执行了一个什么操作,是不是就是select,然后呢,From对吧?From谁from是不是就是我们前边声明的那一大堆的紫查询呀,对不对,你看他这儿是怎么去照唤的啊,实际上在这儿我们应该知道整个商品维度边的主体是谁呢?是SKU,他是咱的主维表对吧?所以在这儿你看怎么做的,它是不是把SKU放在了最左边,然后呢,让其余的表是不是跟它进行一个left状态对吧?哎,那这样一来能保证我们结果当中包含所有的SKU信息啊好,那现在我们来看一下怎么去做的啊,首先就是用s puu跟SKU去做关联,然后呢,C3是不是跟SKU关联呀,对吧?然后呢,是C2,诶是不是跟C3去做这个关联对不对?因为按照咱们那个关系应该是能看出来的,对吧?好,那玩意儿C1跟C2关联,那TM的跟SKU,然后平台属性还有销售属性都跟SKU去进行这个相应的关联好了,那这样一来的话呢,诶我们就能够把上述的这一大堆表都关联在一起了,关联一起之后剩下的事简单了,我们只需要按照啥,只需要按照我们这个。
39:58
目标表当中的字段顺序是不是逐个的选择我们所需的每一个字段,那就完事了,对吧?当然不同的字段是不是来自于不同的子查询,你看有的来自于SKU,有的来自于是s puu啊对吧?等等等等,诶来自于哪?那咱们从能拿就完事了,那最终最终咱们需要干啥呢?是不是需要把数据给他inser一下对吧?OK,关键是insert到这张表的哪个分区,是不是得ins到十四二分区啊,为啥你要知道啊,咱们现在写这个上面的子查询的时候,我们是不是都拿的十四二分据,所以说最终咱们召唤出来这个结果,你得的是什么?是14号这一天的全部的商品维度的信息,对吧?没错吧,那十四二的全部的商品维度信息,不就应当放在我们这个全每日全量的商品维度表的十四二分区嘛,对吧,是这样的,OK,那这个就是我们最终的一个iner领域,Insertright table加上它,然后呢,Part到这个位置就行了,然后这里边需要特别注意的一点是什么呢?就是insertright,你看咱们这用的是right,对吧,OK,那right。
40:58
它的作用是什么呢?还记得吗?覆盖对吧,但是咱现在覆盖的是不是全表。
41:04
这是覆盖全表吗?不是只覆盖这个后边指定的分区吧,对不对?也假如举个例子啊,那现在我这张表里,比如说已经有13号的这个数据了,那我在执行这个in色的时候,它会影响到13号的数据吗?不影响,只是覆盖这个分区啊,这个搞清楚就行了啊好,那在这我们为什么要用in色的right呢?为啥不用in to呢?这个大家,哎怎么去是怎么理解的。这个答案是怎么理解的呀?啊,这个呢,给大家简单的说一下啊,那实际上在这我们之所以用overright而不用度啊,是因为呃,说的高大上一点啊,这个其实为了保证什么呢?保证咱们这个任务的一个密档性。啊,是,是这样的,什么叫做密等啊,这个大家应该清楚吧,什么叫密等啊,就是啊,就是什么叫密档,就是说这个任务我不管执行多少遍,对吧,我都跟执行一次的结果是不是一样的呀,对吧?这叫幂等对吧?什么叫幂啊,比如说一的几次幂,一的两次幂,一的三次幂,一的几次幂是不是都等于一啊,对吧?啊,就这么个逻辑嘛,这叫幂等性啊,就是这个意思啊好了,那完之后呢,我们继续来思考,就在这,我们为什么一定要保证这个所谓的任务的幂等性呢?说白了就是为了保证这个任务它能重复执行,对吧?啊,是这样的,为什么啊,其实大家得知道,就是将来咱们写的这样一大堆的circle啊,我们最终都要交给谁,是不是交给那个调度工具去调度啊,对吧?然后你要考虑到一种情况,就是我们这个任务在每天执行的时候,可能并不是那么的一帆风顺,对吧,他可能跑的时候跑到一半可能会失败,对吧,失败之后咱们正常是不是会需要干啥呀,需要重跑啊,对吧?那重跑的时候是不是可能会把一些已经跑过的任务可能再跑一遍呀,对吧,有可能会出现这种情况,对吧?我们为了避免出现数据的重复,所以说我们必须得把。
42:45
保障每个任务它都应该是密等的,可重复执行的,这一点要搞清楚,当然啊,我们这个哪的任务不能保证这一点的,Ods层的那个数据装载任务不能保证A1.ods咱是不是只能执行一遍,对吧?执行一遍再执行是不是那个数据又没了呀,对吧?是这样的,这一点稍微得注意一下啊好了,那截止到现在呢,那我们这张表的这个数据状态也就就算是了,诶完整了,OK,那当然我们现在仅仅是把14号的这一天的这个诶三给它整完了啊,那你想一想到了将来呢,比如说到了15号的时候,我们要执行的circle应该是怎么样,是不是跟这个逻辑是完全一样的,对吧?只是哪不一样,分时间不一样,对吧?OK啊,那所以说将来这个circle我们还是得怎么样,还是得放在一个脚本当中,对不对,然后用一个所谓的do date变量,是不是去把这里边所有的时间都给它替换一下啊,对吧?哎,就是这么个逻辑,这一点咱们大家要给他搞清楚好了,那他的数据状载咱就完成了,来视频我给他停一下啊。
我来说两句