00:00
好,那接下来我们看商品主题宽表的数据装载啊,那由于这个商品主题啊,以及它下边的优惠券主题,活动主题,地区主题,那他们的数据装载逻辑都和我们之前讲的用户主题的装载逻辑十分相似啊,那所以此处呢,我们就不再演示circleq的编写过程了啊,我们一会儿呢,大家一起去看一下这个最终的装载语句就可以了啊OK啊,那大家呢,只要掌握一个主题的编写思路以及相应的方法啊,能够做到举一反三就可以了,那现在呢,我们一起来看一下这个最终的装载语句啊,那它的数据装载呢,同样分为首日装载和每日装载啊,在这儿呢,哎,我们先看首日啊来,我们把这个circle打开,这里呢,也是先使用with s声明一些子查询对吧?那每个子查询呢,都负责计算最终结果当中的一部分字段,没错吧?比如说第一个子查询,那这是与订单相关的统计对吧?啊,那OK,他会把与订单相关的字段全部统计出来,那第二一个呢,是与支付相关的子查询啊那。
01:00
里边呢,会把啊,诶支付相关的字段统计出来啊,是这样的啊,那现在我们看一下第一个子查询啊,简单看一下就行啊来,那我们看一下它这个具体的逻辑是什么样的啊,那他同样是不是先拿到了所有的订单明细的记录啊,对吧?全表没错吧?那拿到全表之后是不是也是分组统计没错吧,但是与我们之前用户主题表不同的是什么啊,之前咱们用户主题表当中,我们去做订单相关的统计的时候,咱是不是拿到所有订单记录之后,是按照用户加时间进行分组的呀,对吧?因为在用户主题当中我们要算的是什么,我们要算的是每个用户每一天的什么下单次数啊,下单件数啊,下单金额呀等等等,对吧,但是咱现在呢,是什么是商品主题啊,那所以说此处我们的分组字段就变成了什么,是不是变成了下单日期加上SKU商品ID啊,没错,因为我们现在要算的是每个商品每一天被下单的次数,下单件数,下单。
02:00
金额能理解吧,其实主要就是这个分组字段不同,那当然后续其他的子查询也是一样的,区别仅仅就是分组字段不同啊,OK啊,那这就是我们商品主题每个子查询他编写的这个逻辑啊,OK,那下边呢,我们就不再一个一个去看了啊好,那当我们把这些子查询全部声明完之后呢,那接下来咱就可以干啥了呀。那接下来我们是不是就可以把这些字段横向的拼接到一起了,对吧?横向的拼接到一起之后呢,是不是就能得到得到最终的结果,那完了之后呢,再使用动态分区,把这个数据呢,写到商品主题表的诶多个分区当中,是不是就完事了。没错吧,那也是接下来咱要做的呢,就是这个所谓的横向的拼接,对吧?那这个横向的拼接咱可以怎么做呀,是不是可以和我们之前所讲的用户主题一样,采用副alter join,也就是全外联的方式,没错吧?啊,可以这样去做啊,当然呢,我们也可以换一个新的思路。啊,那这个新的思路能实现什么效果啊,它不采用全外联,但是呢,能够实现跟全外联一样的效果。
03:05
啊,OK,而且这个性能呢,要比全尾连要好一些啊,那这个思路具体是什么样的逻辑呢?接下来我们一起来看一下啊好,那现在我找到一个空白的位置啊,给大家简单说一下这个思路当然可以怎么做呢?啊,那假定呢,我们现在已经分别求出了我们最终结果当中的所有字段啊,当然呢,这些字段分散在多个子查询当中,就像我们现在一样,对吧?那那也就是说啥?也就是说每个子查询实际上它只计算出了我们最终结果的一部分字段,没错吧,比如说第一个子查询,我计算出来了前三个字段。那OK,我第二一个子查询呢,计算出来了,诶中间三个字段,也就是456对吧,那我最后一个子查询呢,计算出来了,诶这个789个字段没错吧,也就是每个子查询只计算了一部分字段。OK啊,那完了之后我们接下来干啥啊,接下来我们为每个子查询都补上其余的字段,那怎么补呢?补什么呢?诶补零。
04:03
大家来看一下啊,那这个位置我是不是可以补零,那这也补零,这也补零,那注意啊,要补齐,因为我们最终期望的假如是九个字段对吧,那所以说我得补到九个字段,那这是零,这是零,那同理,那第二一个是啥学呢?那咱是不是得这么补啊,对吧,前三是零,后三个是零啊,那最后一个呢,就是前六个字段都是零。OK,那咱们补零啊,那补完零之后接下来干啥呀。接下来我们不做join,我们做什么呢?做union啊,我们把这个补完零的三个子查询呢,给它union到一块儿啊,因为我们已经都补完零了,对吧,那也就是他们的字段是不是都一致了呀?啊对吧?那所以说我们就已经具备了UNI的条件了啊好,那现在我们UN念一下,UN念到一起之后,接下来干啥啊。接下来呢,我们对union之后的结果进行分组聚合。啊,分组聚合,那分组聚合的时候呢,我们需要考虑两点,第一点你分组按谁分组对吧?那第二点聚合,聚合函数是什么?那我们先来说按谁分组啊,按谁分组,这个很简单啊,假如我们现在不使用这个补灵的方式去做啊,那我们应该用啥?是不是得用全外联呀,对吧?那全外联的时候是不是得有一个关联字段呀,对吧?啊OK,那你的关联字段是谁在这儿呢?你就按照谁进行分组。
05:17
啊,OK,那假如说这几条数据呢,我就分到了同一组里边啊,假如这就是一组的数据啊,现在好,那分到一组之后,接下来干啥?接下来是不是要聚合,那我们的聚合函数是谁呢?就是萨姆,萨姆求和,OK,大家来看一下咱们萨姆求和之后这个效果是什么样的啊,首先我们对第一列进行萨姆求和,那你说得到的最终结果其实就是是不是就是第一行的这个值,没错吧,虽然咱是萨姆求和,但是我们都知道另外两行是不是都是零啊,对吧?那所以说我们就能得到结果呢,就是第一行的值,那同理,那它跟它是不是都等于它。没错吧,那再往后走呢,是不是第345个字段就等于第二行的数值数值啊,对吧?那第789个字段呢,就等于第三行的数值,OK,那大家注意观察一下啊,我们现在是不是就没有使用全外联,然后呢,就把这些所有的字段给它横向的拼接到了一行当中啊,也就是说我们没有使用全外联,却实现了全外联的效果。
06:13
OK,那这就是我们要讲的一个新的思路,那当然啊,这个思路呢,它是有一定的局限性的啊,并不是说所有的全外联都可以这样做啊,那它的条件应该是什么呀?这条件很简单,那如果我们计算的所有字段都是数字类型,那OK,这时候我们就可以使用这种补零,然后加union加分组聚合的方式去做。啊,那如果说有非数字类型的字段,那OK,那这种方式呢,可能就不好用了,OK这个大家稍微注意一下,OK,那商品主题的装载语句呢,用的就是这种思路啊好,我们一去看一下,那这个circle到底怎么去写啊,来,我们往下走,往下走大家来看啊,那现在是不是?呃,已经把每个子查询都提前声明好了,对吧?然后下边呢,我们是不是就可以select from这些子查询了,对吧?然后继续往下走啊,你看select from往下走走from from后边是不是又有一个子查询,没错吧,那我们就来看一下这个子查询里边的具体内容是啥?来我们先看第一个啊,你看现在是不是谁like的,完之后呢,是不是from t MMP啊,对吧?大家还记得TMMP吧?这个TMMP是不是就刚才我们用VS声明的第一个子查询啊。
07:16
对吧?完了之后大家注意观察,从t m po的里边是不是选择它计算出来的所有字段,对吧?那选完之后呢,是不是其余字段是不是都用零给它补上啊,没错吧?那接下来继续往下走,那下面呢,是不是从我们声明的第二一个tmp配这个紫查询里边选择没错吧?然后选择他自己计算出来的这几个字段,然后其余字段呢,全部补零,那大家要注意这个顺序啊,要注意顺序啊OK,那其余每个子查询呢,都会诶补上相应的零啊,那补完之后呢,再用什么呀?用UN粘奥将这些补完零之后的这个紫砂群给它拼接到一起,好,那拼接到一起之后是不是就形成了一个大的紫砂血啊,对吧?啊好,那现在我们再从这个大的子查询里边去选择数据,当然选择的时候呢,需要进行分组啊,当然分组按谁分组,在这儿是不是按照日期加上SID分组啊,没错吧,那分完组之后我们是不是就可以使用sum函数进行聚合了,再来看啊,是不是各种sum求和啊,OK,那求完和之后呢,就得到了我。
08:16
最终的结果了,那完之后呢,使用动态分区,把这个数据insert到all right到DWS层的s action对抗就可以了,OK,那这就是呃,商品主题的首日装载,好,那紧接着我们再来看一下它的每日装载,那实际上它的每日装载呢,要比首日江载哎,更简单一点,对吧?啊好,那现在咱们把这个30号打开一起看一下啊,那首日装载与每日装载最主要的一个区别是啥呀?那其实跟用户主题那边是一样的啊,就是手数装载在这儿呢,我们需要考虑历史数据对吧,你先要去计算啊,每一天每个用户或每个商品它的汇总行为没错吧?那而我们每日装载的时候呢,我们就需要考虑一天的数据就行了,对吧?也就是说我们只需要去计算每个用户或每个商品在这一天里边的汇总行为就可以了,对吧?那这个具体的体现其实在哪啊?
09:06
具体的体现是不是就在这个分组上面对吧,首日的时候我们需要按照商品加上日期分组啊,而每日的时候呢,我们只需要按照商品分组是不是就可以了。没错吧,OK,那这是大家要注意的一个地方啊,那我们按照相同逻辑把每个子查询都写完之后呢,那接下来我们要干啥?是不是仍然是把这些字段横向的拼接起来啊,对吧?那横向拼接的时候呢,仍然可以使用咱传统的这个全外连的方式,或者是使用我们刚刚新讲的这个思路怎么做呀,是不是可以补零,然后union再分组聚合呀,诶也是可以的,那当然这儿呢,我们用的也是补零然后加union再分组聚合的方式,好,那把这些数据呢,全部横向的拼接完之后呢?诶,我们就可以把这个数据呢,是不是插入到DW层的商品主题宽表里了,对吧?然后要注意,因为咱们现在是每日装载,所以说不需要使用动态分区了,对吧?把这个分区写死就可以了,OK,那这就是每日状载的这个circle啊,在这儿呢,我们就不再一点点去看了啊。
我来说两句