00:00
先看第一个时间,呃,维度表啊,先看第一个就是它特殊在什么地方啊,首先它特殊在什么地方啊。啊,它有一个非常的特殊之处啊,有多特殊呢?我们前边这里边所有的表啊,你不管是什么维度表,也不管是事实表,你的维度表不管是全量还是这个每日新能级变化啊,你的事实表不管是什么这个类型还是那个类型,他们都有一个特点,那都是来自于哪儿。都来自于我们的业务系统,是不是都是从业务系统直接导过来的呀,对不对,只不过倒过来之后呢,我这个做了不同的处理而已。啊,但是这个时间维度表呢。这张表的数据呢,并不是从业务系统来的,因为一般情况下,我们在业务系统当中呢,哎,很有可能是没有这个时间维度表所需的这些数据的,并没有。啊,并没有,为什么没有呢?啊,因为这个时间维度表啊,它相当于是我们这个数仓当中啊,才会使用这张表啊,因为什么,因为数仓啊,咱们是不是会保留历史数据啊,那保留历史数据啊,那你这个数据是哪一天的呀,那是不是它需要有一个时间维度表去解释它呀,对不对,那你在关型数据库里边,咱们业务系统当中,我是不是只保留最新数据啊,只保留最新数据呢?那所以说那个时间维度表呢?啊,一般是没有的啊,也是时间的信息在咱们右系统当中一般是没有的。
01:22
啊,那所以说这张表它一般情况下不是来自于业务系统,那来自于什么地方呢。也不是来自于日志啊,也不是日志,那怎么来的呀,一般这个表的数据呢,都是我们自己手动生成的。是咱们自己生成的。能理解吧,咱们自己生成,那接下来我们看一看这张表啊,它有什么样的字段,以及咱们要生成的时候呢,咱们怎么生成啊,我把这个CTRLC粘出来来放到咱们这儿啊,这儿比较清楚啊,看一下这张表的几个字段啊,这张表里边呢,它这个字段主要就是描述时间的,各种描述时间的这个字段,那第一个先看它的主键date ID date ID呢,它这个注释虽然写的是日,但其实这应该是什么呀。
02:04
年月日年杠月杠日啊,就是YYYY-MM-DD是这种格式啊,这是它的这个主见,这张表里是不是一行数据就是一天呀,对吧,一行数就是一天一行一天一行一天,然后往下走,那第二字段是什么呢?是week ID,这个I week ID应该是什么意思呢?啊,这个并不是周几啊,这个指的是什么?指的是啊什么东西。指的是这一天在这一年当中的第几周啊,因为我们是不是,呃,这个每一年都有这个几十个周啊,那是50多50多个对吧?啊,第一周第二周第三周啊,这个只是它位于一年当中的第几周。啊,然后再往下,下边是有个什么呀,Week day,这个才是指的是周几啊周几,那下面呢,这有一个day day指的是什么?是年月日当中那个日,那这有一个month month只是年月日当中的那个,呃,月啊,这呢还有一个quarter quarter是什么意思啊,啊,这个其实含义很多,有这个其实就是1/4的意思,对吧?那1/4在这儿呢,其实指的就是啥呀,季度啊,咱们一年四个季度,那这一天,呃,位于第几季度啊,这个有一个year year就是年月日,年月日当中的年啊,那下边呢,还有其他字段,比如说有什么is字。
03:25
Work aday啊,这个相当于就是相当于什么是否是工作日啊,或者这分的是是否是周末,其实就是如果是工作日,那我就是比如说就是一啊,如果不是工作日呢,我就是零啊,其实这个是不是可以用来区分是不是周末也是一样的道理啊啊然后往下走,这呢有一个holiday ID。在这呢,就是去判断这一天是否是咱们法定的节假日啊,是否节假日,当然了,这里边可能还会有一些其他的字段,当然这些字段呢,都是跟日期相关的啊,甚至会有啊是是否是这个某个节气啊啊对不对啊,那是否是咱们这个,比如说咱们电商,咱们是一个电商主题的对吧?那我们电商其实呃,现在这个节日也比较多,对吧?比如什么这个618双11啊,对不对啊啊还有什么什么九九节啊等等等,有很多这个电商的节日,那在这里边也可能会包含在里边啊,是这样的啊,那这就是我们这个时间维度表啊,它里边的这个字段啊好,那咱们把这几个字段熟悉了一下之后呢,那咱们就来想一想啊,咱这个数据刚才也说了,是我们自己生成的,对吧,因为在业务系统当中一般是没有这个时间,哎,维度所需要的数据的,没有,我们就自己生成,那自己生成,你说这个怎么生成啊。
04:39
怎么生成啊?一行一行自己写行不行?可不可以?可以啊,能实现对吧,咱们有实力对不对,照着写呗,没问题,但是这个呢,肯定是这个效率太低了啊,咱们是程序员对吧?啊,能用代码解决的事情,咱们必须得用代码解决是吧?啊那这个肯定怎么怎么都有,你自己写代码呗,对不对,咱们可以这样去做,你比如说我就写一个加油代码啊写加代码干什么呢?然后呢,我在加油代码当中呢,比如说我写一定的逻辑,然后呢,让它先把数据啊给它生成到哪儿,生成到一个。
05:12
文件里边啊,一个文本文件啊,上到文本文件之后呢,再给它是不是漏到这张表里就行啊。是不是可以这样去做呀,那关键是咱们去生成这个文件,这个逻辑,咱们应该怎么去写啊,怎么处理啊。啊,这个逻辑其实不会太复杂,你想一想啊,那首先我们就就把这个字段去去搞一搞呗,先搞第一个啊年月日,年月日,咱们可以去自己写一个循环,那我从这一年里边的第一天啊,然后呢,便利到哪儿啊,便利到最后一天啊,一年365或366天啊,你写一个循环啊,然后呢,循环的时候呢,我对每一天都做一定的判断,然后呢,比如说第一天啊2020,然后呢,啊零幺杠零幺是不是就1月1号啊,那这个这一天是这一年当中的第几周。哎,你这个是不是,呃,就是相当于其实有类似的函数啊,Week of year啊,就是它是这一年里边的第几周啊,这个其实有相应的函数,你可以直接获取,就算是没有函数,咱们退一步讲没有函数,那我现在给你一个日期,让你去判断一下这一天它属于这一年里边的第几周,这个逻辑应该自己能判断出来吧。
06:20
没问题,我想该,所以这个其实就是没有线上函数,咱们写也能写明白,那接下来下一个呢。这一天啊,是周几,那其实这个呢,一般情况下也是有相应的函数的啊,直接函数就行,把日期给他,是周几自己判断,那再退一步说,没有这个相应的函数,自己去判断,是不是也能判断啊,这个逻辑也不复杂,那再一个呢,啊年啊,这个是当然是日啊,日月年或者年月日这个东西是不是一下就能获取到啊对不对,那第几季度,第几季度这个如果没有函数自己写能不能写出来。啊,我给你一个日期判断,它是一年里边的第几季度,这个没问题吧,啊,肯定也能判断出来啊,其实这些东西啊都好判断,包括是否是周末,这些都好判断,其实不好判断的是哪个呀,最后一个。
07:05
节假日,因为这个节假日它没有没有规律对吧?啊,它没有规律,它每一年可能都不一样啊,而且咱们这个咱们因为因为咱们国家咱们使那个好多节日都是什么呀,使用的都不是咱们这个公历,那咱们使用的什么呀,有使用这个农历的对吧?啊,那使用农历的这个就更不好判断了,因为咱们这个date的ID是不是应该是用的是公立啊,对吧,年月日啊,那所以说这时候这个就没有规律,没有规律的话,那这咱怎么办呢。干嘛呀?也好判断,你自己查日历呗,对吧?啊,确实就是这样啊,你想一想啊,咱们这一年里边能有多少天节假日啊,反天假一共也没多少天对吧?啊,查不了十年的啊啊,因为咱们这个国家的法定节假日一般都是什么呀?是不是一般都是,呃,就是在这一年之前,比如说呃,咱们2012年的这个节假日是不是会在2020年这个结尾的时候会公布啊,对吧,那公布会下一年,我这个每个节假日是几号到几号,几号到几号是不是会公布出来呀?啊一般就是只公布下一年的啊对吧,公布下,那所以说我们可以拿到这个,呃,这个公布出来的这个节假日,咱们自己做一个判断呗,啊如果是哪日期等于哪一天,那我这个节假日就是什么节假日啊,是哪一天就是什么节假日,哪一天就是什么节假日,哎,你就自己做一个判断就行啊,很简单。
08:25
啊或者是说呢,呃,你觉得这样太蠢了,对吧?啊,我们不想这么做,那你可以怎么做呢?你可以用一些高端的操作啊,怎么高端呢,其实在我们这个你就自己去百度,你就百度什么呀,百度咱们这种节假日的数据接口啊,那一般呢,它会给你一个这种啊一个UR或者URL啊,会有一个地址啊,是一个数据接口,然后呢,你可以请求他这个接口啊,请求的时候呢,你需要告诉他,你你给他传一个参,比如说是那个年月日,就是日期告诉他就行,然后呢,他就会给你响应这一天啊,是否是节假日,如果是的话,是什么节假日,哎,有这个现成的接口啊,那你是不是就可以做判断了呀,对吧,相当于一个逻辑复杂一点,当然这个呃跟你自己去判断,其实也没啥太大区别,因为节假日本身也没多少嘛,啊是这样的,所以这个呢,你就灵活处理就行啊,那这个代码呃逻辑基本上咱们就明确了,明确完之后呢,直接把这个呃数据写到文件当中,写到文件之后呢,咱把这个数据往这里边一导就行了。
09:23
啊,是这样的,而且大家要知道啊,往这张表里导数据啊,咱们有必要一天一天的导吗?比如说2020年10月20号,那我就把20号的这个信息导过来啊,21号就把21有必要这样去导吗?没必要,那么因为这张表里的数据呢,我们是可以怎么样的呀,提前预支了对不对,我可以提前,我是不是知道下一年一整年365天,366天数据咱们都能拿到啊对不对,那我就可以一次性的往这张表里倒多少啊,诶倒一年啊,一次就倒一年的对不对啊,因为这个是提前固定的嘛,相当于那咱们就可以一次倒一年,一次倒一年啊,如果说不考虑这个节假日的这个事儿啊,那其他东西是不是都是咱们这个功率都是有规律,都是固定的呀,对不对,那你甚至都可以一下倒几年,倒十年啊,倒八年,倒五年都可以啊,这因为考虑到节假日的问题嘛,咱们只能是获取下一年的,那这个呢,你就一次性到一年就行啊,是这样的啊啊这个呢,就是咱们这个维度表,它的这个特殊之处啊,它的特殊之处啊行,那这一点我们大家搞清楚就可以了啊,那同样的呢,这张表我们也没有对它进行分区啊这个。
10:30
其实也没有必要分区啊。如果说你要真想分区的话。你可以按什么分区啊啊对,要真想分区的话呢,这个其实可以按照呃年啊去分区啊,当然也没必要,因为这个数据量是不是太少了呀,对吧,一年一共就才300多条数据啊,也没必要分局啊,没必要分局啊啊那这就是咱们提到的这个时间维度表。啊啊,那这个呃代码这个文件呢,已经给大家准备好了,就是这个data info啊点TST,这里边是咱们呃已经生成好的一个文件啊,生成好的一个文件,这里边呢,有两年的数据啊,这里边有这个呃一九年的,还有这个二零年的啊二零年的,那这时候呢,我们去把这个呃这张表,因为比较特殊,咱们现在就呃现场咱们就给它导一下吧,啊就给它导一下啊,咱们看怎么往里导文件,假如咱们已经生成好了,那我们要做的就是把这个文件漏到这张表里,然后咱们再注意观察一下啊。
11:27
这张表咱们是什么结构,是帕克的加拉泽罗对不对?那你说你直接往这张表里漏的,它能识别不?识别不了未来,那么咱们生成的文件是文本文件,普通的文本文件对吧,那我去从这上面里读数据,他是不是肯定按照PA qui去解析,那肯定解析是有问题的,他说这个直接漏的还不行啊,直接漏的不行,那怎么办呀。咱可以怎么做?能不能这样去做,我们先建一个临时表,这个临时表呢,那它的这个数据的格式呢,咱们就不用盘柜加拉子罗了,咱们就是什么格式啊,普通的文本,哎,这个格式,那这样一来,我们把那个文件导到这个临时表里,那它是不是能识别,它能识别之后咱们再怎么做呀。
12:12
啊对,在使用insert加select的方式,再往这张真正的哎时间维度表里导出去,是不是就没问题了呀,因为你insert的时候它会走什么,是不是会走计算引擎,走计算引擎是不是会有一个output format呀,Output form format用谁是不是应该用这个表,建表的时候指明的output format呀,哎,那就能够正常的这个往里边写数据了啊,就是它所要求的格式是这样的,咱们这样去做啊,好,那所以说在这呢,我们需要建一个哎临时表,咱们往下拉啊往下拉。这边呢,有一个临时表。来CTRLC,咱们把它拿过来啊呃,拿过来之后呢,我们把它放到这个呃,Data grape当中啊,放在这CTRLV,这是咱们那个临时表啊,这个表名呢,后边有一个tmp,然后呢,你会发现这个呃数据的格式呢,非常普通啊,就是一张普通的表,但是字段呢,跟它是一模一样的啊,咱们把这张表啊,现在就给它建出来吧啊,临时表建完,那这时候呢,把这个真正的把这个维度表也给它建出来啊走。
13:13
啊,引荐完,那建完之后呢,咱们需要把这个date ino.TXT文件是不是得给它上传呀,对不对,那之前我看一下给大家发没发这个文件啊,我找一下,我们找到这个来往下翻一下啊,找到这个资料啊来打开,打开之后呢,我们找到资料,资料里边呢,没有一个有一个date对吧,Date当中是不是有一个date in for.tst啊在这个八里边啊,大家把这个文件呢,给它上传到我们的这个呃集群当中啊,我先随便找个地方就行啊,比如说我在这儿,呃,CD到我看在哪CD到OD model啊呃到这个dblog吧dblo,呃,我就放到这个路径下吧,其实放哪都可以,我还是放到家目录吧,好找啊哎,加目录放到BI目录里边啊,CD到这个B。啊I我放在这里啊,那需要往上传一下。
14:04
嗯。好,那这时候咱们找到我们所需的那个数据文件啊,来走,找到资料啊,找到date。然后把这个传过来双击啊,已经传过来了啊,LL,好,这个PWD下啊,那现在路径是不是就在后码硅谷B下边有一个date in for.tst对吧?那咱们来复制一下这个路径,那这时候我需要先使用一个load的语句将数据导到咱们临时表里对吧?啊,来写一个语句啊,那个语句呢,就是load date,这回得加啥呢,Local了对吧?然后in pass,那个pass呢,就是哎,Home at,硅谷B目录下边呢,有一个date啊,下划线for.tsd啊,然后后边再加一个into table dwd啊,Diam date for tmp对吧?啊,OK,那把它放进来,这个也没有分区,所以直接执行就可以啊来。Al control enter,走好,这个执行使用过来之后呢,应该已经进到临时表里了,那这时候呢,我们在使用这个insert加来的方式呢,把数据导在咱们真正的用这个时间维度表里啊,来这个词后咱们执行一下。
15:12
放到我们这个data group当中啊,CTRLV啊,那它直接执行就行了啊,Ctrl enter走。这个呢,需要走计算引擎啊,所以说相对啊要慢一些。看这边。啊,已经开始跑了啊。他们稍微等一下。等他跑完呢,这个咱们一会去检查一下这个日期维度表当中有没有数据啊。来看一下这个应该跑完了啊,我们打开这个DWD层的啊d date in for,哎,开始,哎,这个数据是不是已经进来了呀,来进来就行了,那这张表呢,咱们之所以在这儿就给它把数据导进来了啊,是因为什么?因为这张表比较特殊啊,呃,这张表呃后续啊,咱们不会把这个装载语句放到脚本当中。
16:06
因为它是不是不需要每天都导啊,这个是不是咱们每年自己手动执行一次就行了,所以这个诶装载数据的任务呢,咱们后续不会给他放到脚本当中的,那所以我在这儿呢,就直接给它导进去了,能理解吧啊后续呢,咱们还会再把这个事儿说明一下的啊,那你现在做没做都无所谓,后续呃,咱们在使用那个脚本导的时候,我还还会再把这个提一下的啊,如果当时你没导,你再回头来导一下就行啊啊这个呃,日期维度表咱们就搞定了啊来把视频录一下。
我来说两句