00:00
呃,好了,各位同学,那咱接下来呢,就进入到我们的第五张维度表了,这张维度表了,我们叫做日期维度表啊,是这样的啊,那这张表跟前面的表相比就有点特殊了,其实咱们前面四张表他们有一个共同的特点,什么共同特点都是每日全量快照表,对吧?没问题吧?OK啊好,那接下来我们看看这个所谓的日期维度表,它特殊特殊在什么地方?OK,好,那首先呢,我们需要先明确一下,就是日期维度它会跟我们的哪些业务过程有关系啊。其实都有关系,因为你所有的业务过程我都会有一个发生的时间吧,对不对,因为一个业务过程是不是对应的是一个事件,对吧?每个事件都有一个发生的时间,对吧?所以说你是不是都会有一个日期维度或叫做时间维度啊,对吧?哎,所以说这个大家应该是能想明白,好,那接下来我们继续往下进行,那下边呢,我们正常情况下应该进入到哪一个环节了,是不是就这个表结构的一个设计的环节呀,对吧?那设计表结构按照我们之前的那个逻辑来说,应该是怎么做来着?
01:00
找主维表相关为表对吧?OK,那现在呢,咱们去找一下咱的业务系统里边,那当然这个不是业务系统啊,这咱们找的真正的业务系统,那我们的业务系统当中有没有跟这个所谓的时间或者是日期维度相关的表呢?咱们会有一个什么存储年月日,存储十分秒,存储星期这样的这样的这个信息的表吗?会有吗?根本就没有,是这样的啊,那所以说那现在大家应该能够体会到我们这个日期维度表的第一个特殊之处了,也就是说这张维度表它的设计灵感,包括将来它的数据其实都不是来自于业务系统的,对不对?你像我们前面的这些表对吧?你在设计它的时候,你的灵感来自于哪?是是来自于业务系统的表对吧?那包括你给它做数据装载,数据是不是也是来自于业务系统啊,对吧?但是日期维度表它是一个比较特殊的存在,那它的设计灵感,包括将来它的数据都不是来自于业务系统的,诶这一点大家一定要稍稍微的注意一下,就是我们几乎所有的业务系统当中都不会去存储什么与日期维度相关的信息,它没必要,它用不着啊是这样,所以他那基本没有,那所以说日期维度员,那通常呢,咱们啊就跟业务系统没有太大的关系了,这1.1定要注意啊,是这样的啊好,那这样一来的话,我们就得琢磨琢磨了,那日期维度表的表结构我们到底怎么设。
02:17
技能我没有参考了,对吧,我不知道去哪获取我这个每行数据是什么,我的列到底有啥这些信息了,对吧?那我这个日期里边到底怎么设计,那只能是根据我们实际的需求去设计了啊好,那接下来呢,我们就来分析分析咱这这个日期维度表到底如何设计,首先我们需要先明确的是什么呢?仍然是这张表每行指来的是什么对不对?那大家想一想,你说日期维度表每行我存的应该是一个什么呀?哎,通常其实就是一个什么呢?通常就是一个日期,注注意啊,一个日期指代的是什么?是年月日,这叫一个日期对吧,哪一年哪一个月哪一日,这叫一个日期啊OK,那这个日期为代表当中,我们每行数据指代的通常就是一个日期,哎,这一点要搞清楚,但是啊,这个并不是绝对的,各位同学这个并不是绝对的啊OK,那为什么呢?实际上这个呃,日期维度表或者时间维度表,每行指代的是什么?这个通常是跟谁保持一致的呢?是跟咱们数仓的计算周期保持一致了啊是这样的啊,就是数仓的计算周期,咱们是往往就是天呀,对吧,一天算一次,一天算一次,那所以说我们日期维度表当中每行数据所指来的这个数据呢,通常就是一天的一个日期,诶是这样的啊,那假如说我们这个企业当中,那咱们的这个数仓,我的计算周期并不是天,我有没有可能是小时呢?有可能有有有有可能我有一些需求是我需要去出一些小时级别的报表,对吧,我一个。
03:46
小时出一个结果,一个小时出一个结果,那这种情况下,那你说咱们这个时间维度表每行之类的就应该是一个什么呀,就得是一天里边的是不是一个小时呀,对吧?哎,这个一定要稍微的注意一下啊,也就是说日期维度表每行数据指的是什么,取决于咱们数仓的计算周期,哎,这个要搞清楚,但是通常就是天啊,通常就是天,这个行咱们基本上就是这么去确定的,那列应该有啥呢?
04:12
那列应该有啥呢?行,咱们现在一法是一天对吧?那列应该有啥呢?那其实呢,就是各种与这个日期相关的维度属性了,那这里边可能会有什么呢?比如举个例子,那我这一天的,哎,所属的年份,所属的月份,哎所属的这个日对不对?那我这一天的这个是周几?哎,我一天位于一年当中的第几周对吧?我今天位一年里边的第几季度等等等等,那这些呢,其实都是跟这个日期相关的一些维度属性啊,是这样的,OK,好,那也就是说我们日期维度表当中存在的字段基本上就是这些啊,就是这些啊,是这样的啊好了,那这张表的每行是什么列,大概有啥,基本上有一个初步的认识了,那咱接下来呢,就把这两表键盘语句拿出来,咱们仔细的看一下啊,来给它CTRLC拿过来之后呢,我放在这个位置啊。
05:01
好了,各位同学,那现在呢,我们看一下日期维度表的一个完整的建表语句,首先咱还是老规矩,先熟悉它的表名,这个表名叫什么呢?叫做dim date对吧?哎,也就是咱这个日期维度那玩意注意一下啊,我这儿后边有没给它加什么负这样的一个后缀,我这没有加对吧?我这为什么没加呢?诶一会儿咱们再说啊,先注意到这样的一个小细节,大家来继续往下走,下边呢,我们来简单的熟悉一下这里边的表结构,表结构是不是还是得从行列分区去看一下对吧?行,那每行指代的是什么呢?诶,其实刚才已经说过了,那咱们这个数它的里这个计算周期是不是就是填对吧?所以我们这张表每行就是一个日期啊好,接下来继续往下走,看看它里边具体的字段啊,字段首先第一个就是date ID,这其实就是那个年杠月杠日啊,是这样的啊,就是这样的一个日期,这是作为它的一个ID,这个要搞清楚年杠月杠日啊,好接下来继续往下走,这个week ID,这个week ID在这指的是什么呢?是周ID,但是具体是指那今天是位于我们这个一年当中的第几周,对吧?诶来继续往下走,那下边这有一个什么呢?Weekday。
06:08
这个week指的就是啥?就是周几呗,对吧,今天是周几啊好,继续往下走,那这个是什么?这其实就是年月日里边那个日对吧?那这个呢,就是年月日里边的那个月,那这个呢,就是年月日里边那个年,对吧?那这个quarter呢?Quarter是不是就是1/4,就是季度的意思啊,对吧,第几季度啊,是这样的啊好,那除了这些基本的字段之外,我们往下应该还有什么,还有一个意思,Workday什么意思,就是是否是工作日对吧?OK啊好,那完之后下边一个呢。Holiday,哎,节假日啊是这样的,那这俩字段在这儿,它里边的具体的规则是什么样的,给大家简单说一下啊,如果今天是工作日,那这个字段的值就是一,那否则就是零,那如果今天是节假日,OK,那我这个字段存储的就是节假日的名称,如果今天不是节假日呢,那我这存的就是啥,就是空啊,就是闹啊,这个大家要注意一下啊好了,那这实际上呢,就是咱们这个日期维度表当中的这个全部字段啊,是这样的啊,当然企业当中呢,哎,我们这个不同的这个业务,它里边的这个就是日期维度表里的字段呢,可能啊还会呃有所不同啊,是这样的,它可能会有一些就是跟他那个具体的业务密切相关的一些日期的属性啊,也是可能会有的,你比如说我们做电商的,那我这里边呢,可能还会有一些什么东西呢,比如说我的一些这种,就是每年都要去举办的一些什么呀啊这个比如说这个促销活动啊,是这样的啊,比如说举个例子,那我这儿呢,呃,就是举个例子啊,比如说我这个是促销活动啊,是这样的。
07:38
促销或者是促促销的一些特定的一个,呃,这个日期对不对,比如说到了双11之后啊,那这里边儿我会标一个这个双11对不对,那比如说到了618之后,我会标标标一个什么618的这样的一个,呃,特殊的一个这个活动等等等等,也会有一些就是种电商当中的这种,就是促销的这种节假日啊,是这样的,当然叫节假日可能不太合适啊,就是这个意思啊OK,那这个咱们大家稍微的理解一下就行了,也就说白了啊,就是咱们这个日期维度表里存放的就是啥呢?就是一系列的跟日期相关的维度属性啊,这个稍微的理解一下啊好了,那截止到现在呢,那这张表当中呢,每行是什么,还有它具体的列都有啥,咱们大概有一个初步的认识了,那接下来呢,我们再来明确一下,就是它的分区,它的分区是怎么规划的,大家来看这面咱们有分区吗?
08:25
十没有分区,你跟他这个表格实际上也能验证,咱这儿根本就没分区,对吧,大家想想你说为啥他没分区啊,为啥没分区,为啥没分区。没必要分区吧,对不对,OK,你要知道啊,就是咱们如果对这张表分区,那你说我们按照什么分区呢。理论啊,如果要对分区,按照我们之前的那个思路,是不是按天分区啊,对吧?哎,你要是按天分区,那我这张表你一个分区里边应该是几条数据啊,是不是就一条啊对不?因为我这张表里是不是一天就一条数据,对不?你按天分区一天就一条,那这样相当于你将来会有什么,会有大量的小文件吧,对不对,因为每个分区的数据都存在不同的路径下呀,对吧?那你这个路径下就一条数据,那这个肯定是小文件了,对吧?这个没必要啊,所以在这儿呢,我们这张表并没有对它进行这个分区啊,这一点大家要稍微的注意一下啊,OK啊好了,那这就是咱们这张表的最终的一个表结构,那这张表那从它的这个设计思路,还有这张表的最终的表结构,尤其是这个分区上面来看,它跟前面的表相比,是不是还是有一些特殊之处的呀,对吧,这个理解一下啊好了,那这个表的结构咱们基本上就确定下来了,完成之后视频我给他停一下。
09:33
嗯,来吧,各位同学,那接下来呢,我们一起来分析分析,就是这张表的数据装载咱应该怎么去做,哎,大家想想,你说他的数据装载应该怎么做,其实你应该能想到,就是这张表的数据装载跟咱们前面那些表是不是也不太一样,对不对?首先那这张表呢,呃,我们前面提到过,就是它的设计灵感,包括它的数据其实都不是来自于业务系统的吧,对不对,那我们来自于哪儿呢?
10:01
对不对,那他应该来自于哪,有的说来自于日历是吧?啊是这样的,OK,那这个确实是这样的,有说这张表我们从业务系统肯定是拿不到数据的,我们肯定是得怎么样呢?是我们手动的,是不是往里边导数据才可以啊对吧?是我们自己,诶往里边放数据,诶这个一定要稍微的注意一下啊,OK,好,那完了之后呢,给大家简单说一下,你说咱这两本的数据,我到底应该怎么往里边放呢?我需不需要像之前一样,我我比如说我每天往里边插入,呃,一天的数据,每天往里边插一天数据,要不要这样去做呢?要不要其实根本就不用对吧?啊没必要说我一天往里边插一条数据,为什么不用呢?因为你想啊,日期维度表的数据,它实际上呢,是有一定的什么呀,就是可预见性的,是有一定的规律的,对吧?那咱们这个是有这种日历这种立法的,对不对,也就是我在这儿呢?呃,比如说我这个一天的数据,我一年的数据,我在这儿我是不是都能找到,对吧,甚至我十年的数据我是不是也都能找到啊,对吧?那所以在这这样一来的话呢,我往这张表里插数据的时候,我们并不是说每天往里边插着一条,我们怎么做呢?我们是直接是不是批量的导入就完事了,对吧?是这样的,那具体怎么去做的,我们看一下文档,这里边其实已经说的很清楚了,但说通常情况下呢,日期或者要时间维度表数据不是来自于业务系统的,而是需要我们手动写入的,并且由于时间维度表的可预见性,所以可预见性的刚才咱们已经解释过了,对吧?诶我今天能看到接下来一年的这个数据对吧,叫可预见性,那所以说我们不需要每天重复的导入,那那所以一般情况下我们可以批量的导入,那我批量我通常一次导多长时间的呢?
11:39
哎,这样他说一次倒一年的,哎为什么一次只倒一年的,我一次倒十年行不行,对吧?我我我这我我我是不是一次我看十年也能看到,对吧,为什么指导意见呢?啊,其实对对大家应该是能想到的,其实这里边主要跟谁有关系啊对,主要是跟节假日有关系,这个节假日呢,跟其他的这些维度属性不一样,这些你是有明确的规律的,但是节假日这个每年是不是可能都不太一样啊对吧,比如说有一年,比如说那个我记得有一年是那个五一,好像是对吧,是不是因为当时有一个记者,呃,这个反映了一下,对吧,由原来的三天直接变成五天了,对吧?我记得应该是有有这样,也就是这个节假日呢,它每年它不是固定的啊,它不是固定的啊,这个要稍微的注意一下,那所以说这个节假日咱们怎么去处理呢?大家都知道咱们咱们这个国家的法定节假日日是怎么处理的,知道吧。
12:29
知不知道咱们这个节假日怎么定的?是每一年是不是结束的时候,由国务院去公布我们下一年的这个节假日安排啊,哎,他是这么去确定的,那所以说在这儿呢,我们就只能怎么做呢,只能说OK,我们在每一年的对吧,这个年底的时候,等这个国务院发布了我们这个下一年的节假日的这个安排之后,那咱们是不是再把我们下一年的数据给它进行一个批量的装载呀,对吧,也是我们通常每次只能往里边装载一年的数据,主要是由于这个节假日啊,这个大家要稍微注意一下好了,那这个特殊之处,咱们大家需要先给他注意到啊好,那接下来我们继续往下思考,咱们继续往下思考啊好,那现在呢,我们已经知道了,我我就是批量的一是不是一一次搞一年呀,对吧,那关键是这个怎么具体怎么去做,具体怎么批量的往里边导一年的数据。
13:16
怎么去做,我写365个这个音色的鱼行不行,行不行,我怎样批量的往里面去做呀,这个东西。对不对,大家琢磨琢磨这个具体怎么实现对吧,我批量的往里边导数据啊对吧,怎么批量的一倒倒一年呀。自己琢磨琢磨,想一想。可以怎么做呀?啊,其实这里边你的实现思路非常非常的多啊,在这儿给大家简单说一下咱们文档这块啊,建议大家是怎么做的啊,那文档呢,这边建议大家是这么去做的啊,首先我们可以怎么做呢?你先啊先写一段小代码。那这个代码呢,你可以用Java去写,可以用这个Python去写啊,无所谓用啥写都行啊,然后呢,你在这个代码当中,你去写一段什么样的小逻辑呢?很简单啊,这代码里边呢,你写一段这样的逻辑啊,就是说你需要去便利这个下一年的第一天到最后一天的每一天的日期啊,这样也就是从比如说举个例子啊,咱们下一年应该是2023年对吧,2023年的1月1号到2023年的12月31号,对吧?你把这个日期从第一天到最后得给他遍历一下,那便利的过程当中,你需要怎么做呢?你需要去计算每一个日期的这些属性信息,对吧?这些属性信息怎么计算大家应该都知道吧。
14:34
比如说举个例子啊,假如说我们用Java去写,那加务当中我们是不是有日历的API啊,对吧,你只要给他一个日期,那他是不是就能够帮我们自动的去计算,诶你今天的日期所在的周是第几周对吧?你是周几,你是哪一天,哪一个月,哪一个季度,哪一年,这些是不是都能够算出来,对吧?就是退1万步说,假定他没有这个日历API,那让大家自己去算一下这些东西大家会不会做。对吧?给你一个日期,让你算一下它是一年当中的第几周,这个应该能算出来吧,对不对,OK啊,那完了之后你算一下今天是周几,这个肯定也没问题吧,对不?这其实都非常简单,所以说前面这东西都很简单,非常非常简单,对吧?你可以用现成的日历API,你也可以自己手动去算,这个都没问题,关键是难,难在哪呢?难在这俩字段上面,这俩字段你在这个就是我的这个代码当中,你没办法直接去调用API去计算,对吧,这个是这样,因为你国家法定节假日嘛,这个肯定是呃,算不出来的,那所以说这俩字段通常怎么处理。
15:32
怎么处理?哎,这个其实呃逻辑也比较简单,两种思路啊,首先第一个思路啊,你要是想图方便一点的对吧,或者说想长得高大上一点,你怎么办呢?你可以在网上去找一些这种在线的这种日历的接口啊,是这样的啊,就是网上会有一些免费的或者是付费的日历接口,对吧?那你只需要怎么做就行了,按照他的要求给他发送一个相应的HTTP请求,对不对,然后呢,把你的日期携带过去,那么照他就给你返回这一天里边所有的日期属性了,对吧?比如说今天是否是节假日对吧,是什么节假日他都给你返回过来啊是你通过这样一来的话呢,诶是不是就能够去处理我们这两个字段了呀,对吧?啊是这样的啊,当然这个处理起来可能比较麻烦,因为呢,你需要去找一些这种日历的接口,对吧,这个其实免费的也不太好找啊,基本上呃,质量高一点的都得付费啥的,比较麻烦啊,是这样的,那完事,其实咱这儿也没必要,对不对,你这儿也可以怎么去做呢,诶你可以自己怎么做呢,你可以特殊的把这几个这几个日期处理一下。
16:32
就完事了,对吧?你可以比如说看一下我们下一年到底哪一天是节假日,对不对,那完之后你怎么办呢?你可以在代码当中,比如说你自己去维护一个map对吧?这个map当中呢?诶会有什么呢?K为建设,对对吧,那K就是啥?K就是这个节假日的一个日期,比如说2023年,2023年的这个1月1号,这个应该是元旦,对吧?然后呢,它的value就是元旦呗,对不对,那完了之后,你把其他的节假日的日期也都给他维护在这个map当中,对吧?那维护完之后呢,我再去便利每一天的日期的时候,你是不是都从map里边去获取一下这个日期的对应的这个这个这个节假日就完事了,对吧?能拿到那你就给他拿过来,拿不到的话那就是闹呗,对吧,你这样一来是不是也能去处理一下这个节假日的那个问题啊,对吧,诶是这样的啊OK,那也就是你这样去处理也行好了,那这样一来的话,咱们应该就就能搞搞定什么了呢,就说我能够去便利我这一年里边的每天日期,然后呢,去计算这些属性,好你把这些东西都算完之后,接下来干啥呀。
17:28
你给它干啥呢?你把这些内容啊,都给它写到什么里边,是不是通过IO写到一个文件里边就完事了,对吧?哎,我们写到一个文件里,你写了一个文件之后,那接下来怎样把这个数据放到这张表里呢?漏一下是不是就完事了,没问题吧?OK,那这样一来是不是比较方便啊,对吧?是这样的,就是在这儿我们往这上面导数据的话呢,我们通常就是这么去做的,就是首先呢,你需要先写一段小代码,然后呢,去便利一下你这一年的每一天的日期,去计算每一个属性,对吧?计算完之后呢,把这东西呢,全部写到一个这个呃文件当中,那完了之后呢,再把这个文件load到咱们这张表里,就能够完成这张表的数据装载了。啊,实际上大体的逻辑就是这样的啊好了,那这个完成之后呢,我们把视频停一下,然后呢,一会儿咱们再来说这个具体怎么去装载啊。
18:16
啊好了,各位同学,那咱接下来呢,分析分析,就是这张表的处理状态到底呃如何去实现啊,呃,按照咱们刚才的思路呢,就是我们在这儿呢,需要有一段小代码,然后呢,把这个呃,我们所需要的这个日期维度的数据是不是一次性的生成到一个文件当中啊对吧?OK啊,那这个代码逻辑比较简单,所以在这儿呢,我们就不再呃一下去写了啊完了之后呢,我已经把这个文件提前生成好了,现在就已经放在咱们这个文档里边了,咱现在可以打开简单看一眼啊,来看一下,这其实就是我之前生成的这个数据啊,由于咱们这个数据仓库,我们模拟的日期是2020年的这个六月14之后的,对吧,所以在这儿呢,我就生成了这个两年的数据啊,一个是2020年的,一个呢是往下走是2021年的啊这样的啊,然后可以简单的看一看,就是咱们这个数据到底长啥样啊,其实很简单,大家看啊,首先这其实就是我们是不是2020年第一天的这个数据啊,对吧,那这一天呢,诶是不是工作日呢,不是工作日,那这个是不是这个字段就是零了,对吧?前面这个都没问题,咱就不看了啊,那这呢。
19:16
就是元旦,OK,那完了之后下边呢,诶这些是不是就都是那个非节假日啊,对吧?那它存的就是空,哎,这一定要注意一下,因为在亥物表当中,这个空默认是不是存于反斜二大N呀,对吧?所以这个空值咱们在这儿呢,就生成反斜二大N,这个一定要注意,那这就是生成的两年的数据,哎,其实这个数据有了之后,那数据装载是不是就简单了,对吧,我们只需要怎么做就行,是不是只需要把我们那个文件是不是load到咱们这张表里就OK了呀,对吧?好,那现在我问一下大家,现在如果咱直接把我们刚刚看到的这个文件漏到咱这张表里,你说能不能正确的识别。能不能能不能正确的识别。这个显然是不能的,为为为什么不能啊,因为咱们现在嗯,文档当中这个文件是一个什么文件,是一个TXT,是一个文本文件,对吧?而那咱们这个建表语句当中,我们这个表的存储格式是什么呢?是orc orc本质上来说呢,是一个二进制文件,对吧?那所以说你再从这张表里边去读表下边的文件的时候,它肯定是按照什么样的这个格式去解析呢?是按照orc的格式去解析,对吧?那结果你放的不是orc,那是不是这个文件读出来肯定是有问题的,对吧?好,那现在问题来了,怎样去解决这个问题。
20:29
我怎样能把这个文本文件最终放到这个orc这个表下面,哎,还得能够正确的识别出来,对吧?诶怎样去实现这个怎样解决啊大家。咱们可以怎么做?对吧,你文本文件直接放上去肯定是不行,对吧?啊OK,好,怎样能把我们这个数据放到这张表里,还得能够正确的识别出来,太琢了吗?嗯,其实这里面最直观的一个做法就是怎么做呢?你想办法,你把这个东西给我转一下,你把它转成RC格式不就行了吗?是这个道理吧?呃,关键是怎么去实现呢。
21:04
怎么去实现,嗯,咱可以先怎么做,我们可以先建一个什么表,临时表,对吧?可以先建一个临时表,那这个临时表咱们在建表的时候,那我的存储格式声明为什么呢?那就文本文件呗,对不对,那这样一来,我把那个文本文件放到这个临时表里,应该是能够查出来的,对吧?那之后呢,再怎么做。是不是在执行一个insert加select这样的语句,是不是就能够把数据最终写到这张表里边来了呀,是这个道理吧?OK,那咱接下来呢,就把这个去操作一下啊好,那首先呢,我们需要先把这个键盘水具给它来拿一下,找一下我们这个所谓的临时表的一个键表,就是它啊,来咱们拿过来,其实这个临时表呢,呃,和我们真正的这个日期维度表,它的字段等等等是完全一样的,唯一的区别就在哪呢?就是下边的这个存储格式,对吧?这个存储格式在这儿呢?我声明什么这个start as什么的吗?没有,没有的话默认就啥来着,默认就是test file去吧,那所以在这儿呢,我们就直接把这张表给它建出来,那就完事了,来咱们给它创建一下啊,好,那我把上面这个真正的这个日期维度表也创建出来,好,那现在咱就可以干啥了,是不是可以直接把这个所谓的文本文件是不是漏到了这张表里来,对吧?其实注意观察,这是一个分区表吧,这不是分区表对吧?既然不是分区表,那我能不能直接把文件放到这个路径下。
22:23
能吗?你直接把文件放在这个路径,它是不是也能识别呀,对不对,但注意观察我注意注意注意注意听啊,我这强调的是它不是分区表,如果它是一个分区表,那你如果呃是一个分区表,然后你直接在它这个表对应的路径下边,比如说我去创建一个分区的路径,然后里边放上一个文件,你说这个分区表它能识别这个数据吗?分区表这样做你能识别吗?不能,你直接把数据放到分区表的路径下,它是不能识别的,哎,那哎这种非分区表你直接放到路径下,这个是能识别,为什么呢?因为分区表它是不是得有那个分区的原数据信息才能查出来数据啊,对不对,你光偷摸的在它下边给它放上这个数据了,它原数据它没有对不对,那它也查出来数据,诶你得修复一下原数据,它才能查出来,这个一定要注意啊好,那现在咱接下来呢,就可以直接找到这个路径,然后呢,把我们这个文件呢,放到这个路径下就就完事了,就不用再去执行漏操作了,来OK,找到这两本的路径是hfs路径,对吧?那之后呢,我们给它上传一下咱们所需要的这个,呃,文件直接从这上传就行对吧?呃,然后这个文件在哪找啊。
23:26
我给大家发的资料里边就有这是数仓那个资料对吧?找到资料,资料里边呢,找到这个第三一个data就数据,然后里边有一个date info.tsd,然后呢,你双击,然后呢,Upload上传就完事了,好,那现在呢,数据是不是已经传到了咱们这个位置来了,对吧?传进来之后,那理论上这个临时表是不是就应该已经有数据了,对不对,有没有咱查一下啊,来往下走,来到最底下刷新,呃,双击好,那这个观察,你看这个临时表已经有数据了,对吧?那下边这个闹值什么的是不是也都能够正确的解析出来,诶,OK,那这个临时表有数据了,那接下来我们要做的就简单了,只需要再来一个啥,是不是insert一下,然后呢,Overright table dim是不是date呀,对吧?然后后边跟一个啥,是不是select星from那张表是不是就咱这个临时表对吧?OK,那你执行这样的一个操作之后,那理论上咱这个数据是不是就能够顺利的写到这张表里啊,对吧?好,那现在咱们给他执行一下走。
24:20
好,这个很快就能执行完啊,OK,还没有那么快,为啥呢?因为这边可能是我那个绘画还没起,呃,因为这是我执行的第一个需要去计算的这个三尔特啊,因为这个开度我是今天新起的啊,OK,大家稍微等一下啊,呃,等它执行完之后,那我们这个数据应该就能够顺利的装载到那个真正的日期维度表了,好,那这个执行起来比较简单,这个操作比较简单,但是大家得琢磨琢磨啊,你说为什么咱们执行一个这样的语句,就能够把一个文本文件里边的内容对吧,最终转成了我们这个orc这样的一个格式。对不对,怎样去实现这个功能的呀。对不对,琢磨琢磨看能不能想明白,诶已经执行完了,咱们去查一下看有没有数据啊,诶有数据,这是那个真正的日期维度表啊,你看是不是现在OK,已经是正常的,对吧?好,那现在琢磨琢磨,为什么我执行了一个这样的搜索语句,它就把原来的那个文本文件转成了一个这种orc的一个文件,它怎么做的呀?
25:18
其实这个道理很简单,各位同学啊,OK,那这里边给大家简单的解释一下啊,首先咱们需要先明确一点什么呢?就是OK这个音色的语句,将来它最终会转成一个啥,是不是一个计算任务啊,对吧?这个计算甭管是Spark的计算任务还是MR的计算任务,对吧?它总之是一个计算任务,那这个计算任务呢,是不是需要从一个路径下边去读文件,然后呢,再把结果写到另一个路径下边啊,对吧?好,那读是从哪个路径下读,是从这个表的下边路径下读对吧?那写呢,是不是写到这个表对应的路径下没问题吧?OK啊,好,那完之后咱们来琢磨一个问题,你说我的一个计算任务,甭管是MR还是Spark,它在读数据的时候都需要用到什么东西?MR,对吧?假如说MR你读文件你需要用的什么?Input form ma吧,对不对?OK,那你往外写是不是得用到output form ma,那我现在问题来了,你说这个计算任务,我读数据的时候,我用的是什么音input。
26:12
是哪张表是音普卖的?你读哪张表是不是就用哪张表的in input,对吧?也就是它用的是临时表的in input for吧,对吧?那我要写的话,是不是写到这张表对不对?那所以说我的outp mind应该是啥?是不是应该是用你写到的这张表的output form mind呀,没没问题啊,大家应该都记得吧,我们每一张表have当中是不是都会有input for outp,还有什么SE啊,对吧?好,那咱接下来就来看一看这两张表的input和output分别都是什么,这个可以简单的查看一下啊,在这呢,比如说我们执行一个show,然后呢,Create table,那后边呢,跟上一个啥,比如先看这个临时表了,OK,那咱现在呢,直接回车,你看一下这张表它的刚才咱们说了是不是用它的音不麦呀,对吧?它的音不麦是什么?往下走是。在这呢?
27:01
是不是很清楚是test in input吧,对不对,也就是说我从这张面读数据的时候,我是用test in input去读的,那是不是读文本文件是没有任何问题的,对不对?那接下来继续往下走,我们来看一看,就是这张表它的,哎,Output for又应该是什么?来直接放在这儿就行啊,来咱们查看一下走。诶,这是我们那个真正的这个日期维度表啊,来看它的output form是什吧,是不是就是OC output form呀,对吧?那就相当于啊,我们这个上面这个in的语句,它最终会转成一个计算任务,然后呢,它的input form是test的input,它的呃呃,这个out form呢是什么呀?是orc,那这样一来它不就能把这个路径下边的文本文件转成这个路径下边的一个orc文件了啊其实就是这样的一个逻辑啊,这一点大家要稍微的理解一下啊,虽然这个serve很简单,但是它里边呃这个计算计算的一个过程,一个流程,咱们也得稍微的思思考思考啊好了,各位同学,那截止到现在呢,诶,我们这张日期维度表就算是诶完成了,包括他的这个建表,包括他的数据装载咱们就都做完了啊,来完成之后视频我停一下。
我来说两句