00:00
来现在已经报错了对吧,那正常情况下,你如果说你不是没打开你这刷新刷新这是不是有一个错误的一个状态啊,那这会怎么找错误呢?你就点右边一个蓝色箭头,点往下拉,你就看是哪步错了对吧,是不是这步错了,这步错了看啥是不是看它对应的日志啊点。点完之后,这里边儿就有他的错误信息嘛,啊,当然这个信息你在哪也能也能找着啊。在哪,是不是在他后台的那个还那个king log里边也能找到,对不对,那只不过就是他相当于他从里边去读,读完之后是不是给咱展示在页面上来呀,就是方便咱们查看嘛啊那接下来你就看看这里边报的是啥错呗啊呃,有的还是不会看日志啊,这个日志怎么看一下,这个日志错误日志这一大堆艾特这个东西不要看了啊,这都是什么,这是不是在给你给你展示出来,就是你报错的那个路径啊,对吧,你要是想看源码,想根据这个报错信息去追源码,看看它源码当中哪哪有问题,你是不是可以看这个信息,但咱们现在又不是自己写的项目,而且源码呢,咱们,呃也也也也基本上不用,就是基本的使用的也基本上不用去看啊,那所以说这一大堆东西你就不用看了,那你看哪啊,是不是看这一大堆at前后就可以了呀,那前边那这有啥呀啊,什么hydo shell exception啊,后边都说什么检查什么这个表的快照的时候,这个失败了,对吧,那这个当然呢,呃,看不懂啥意思,看不懂看下边呗,这是不是有一个什么coby呀,对吧,一般情况下这个Co。
01:21
值得呢。会有这个详细的错误信息,这个一般是咱们人能看懂的语言啊,来你看看这里边有什么错。他说什么这个the table啊,就一张表,哪张表啊,这张表dwdd user in for his,这张表呢,它有什么样的数据啊,有。Du,这啥意思?重复啊Du k不是重复的意思嘛,对吧,那这个应该就是重复的意思,也就是说有重复的K被发现了,这张表当中有重复的K,这个所谓的K是啥呀?其实在这啊,这个所谓的K是那个意思啊,我们的实时表是不是要跟维度表进行照呢,对不对?照是不是有一个有一个咱们所谓的主外键呀,对吧?其实这个所谓的K就是你的连接字段,连接条件,也就是说其实是指的你维度表当中那个所谓的主件,对吧?啊,也是sum k,那这张表当中的主键应该是啥?
02:17
这是哪张表,是不是用户维度表,它首先是不是用ID呀,就是那ID对吧?啊有这有有点重复的数据出现了啊,那后边哪哪个数据重复了呀,哎,就说K等于一。比如你的主见是一的,有几条啊?有两条,一个是它啊,一个是它啊,是有两个为ID为一的呀,对不对,那这是怎么回事啊。这你得考虑一下啊。这张表咱是啥表?拉链表啊,咱是拉链表,那既然是拉链表,我们拉链表当中一行数据是什么样呢?是一个状态吧,对不对,拉链表一行数一个状态对不对?那所以说呢,我们一个用户也就一个ID,是不是可能会对应多条数据,那现在是不是就出现这个问题了,我相当于我的实时表拿着一个UID等于一的这样的一个外键,我去维度表当中找这个ID等于一的用户的信息,结果找了好几条。
03:10
那我是不是不知道该用哪条啊,对不对,因为你有历史状态,有最新状态,我也不知道你要用历史还是最新对不对,那所以他这就报错了。啊,其实不光这张表会报错,你像我们其他的维度表,咱们还有什么维度表啊,那还给他照了一个商品维度表,还照了一个地区维度表,对不对?商品维度表咱是什么表?全量表全量全量表是不是一天一个分区,每天的分区当中就是一个一次一份全量数据啊,那这个是不是肯定也会有类似的问题。对不对。是会吧,因为什么?因为咱们现在你回忆一个问题啊,我们之前在配置咱们那个模型的时候,就是事实表跟维度表的时候啊,咱们选过纬度表的什么分区啊等等这些东西吗?没选过,没选过它照的就是啥。全表就是全表,那我们现在一再强调照问商品维度表这种全量维度表的时候呢,不能照全表,你得照唤什么,照某一个分区吧,对不对,那你照这种拉链表也不能照全表,你得照你的过滤条件,比如说n date等于9999是不是得这样去用啊,对不对?那所以说这边它因为它自己照的是全表,所以说会出现类似的问题。
04:19
啊,那这就是问题,就是这么就就就就是这这就是咱们的问题的原因,那不找到了吗?你找到之后咱们得想想怎么解决。啊,大家想想这个问题咱怎么解决?刚才我们麒麟从头到尾怎么使用,咱们已经过了一遍了,在使用的过程当中,我们根本就没有发现任何一个位置可以配置维度表的这个过滤信息,对吧?啊,根本就配不了他只能照你全面。那所以说咱们这到底怎么解决这个问题呢。啊,怎么解决这个问题,大家有没有方案?有没有方案啊?嗯,自己想一想啊,我把视频先暂停一下。
05:01
好,那这个重复K的问题到底怎么解决呢?那怎么解决,在页面上我们肯定是没有没有没有任何地方可以配置这个东西,对吧?那只只能是咱们自己解决了,那既然我们实时表跟维度表照样的时候,只能照全的全全全全,呃照整张表对吧?既然只能照整张表啊,那我们那个整张表那肯定是会有重复K的问题的,因维度表咱们要么是拉链表,要么是全量维度,你到整表肯定会有重复重复线问题,对吧?那所以说我们是不是肯定不能让他去直接照按。唯独眼了呀。对不对,他照维度表肯定有问题,那你还让他去照维度表,那就不让他照维度表了呗,那你不照维度表,那照谁呀?那么可以给每张维度表都建一个临时表。都建一个临时表,那这个临时表当中啊,是存放什么数据啊。只存放一天的数据,而且只存放哪一天的呀。最新一天的,因为咱们离线是不是麒麟是不是咱这儿也是离线计算,每天是不是计算前一天的数据。
06:06
对不对,那所以说我们就可以咋样啊。那就可以这样去做了啊,建一张临时表,在哪建呀,这个临时表。见。在咱们还里边见呗。每张维度表对应一个临时表啊,然后呢,我们每天需要在我们的流程工作流程当中啊,阿兹卡班调度工作流程当中再加一步,加一步干啥呀,是不是把每张维度表当中的最新的一份全量数据给它insert right到你这张临时表当中啊。对不对,那不同的临时不同的维度表,我的临时表可能不一样啊,那你对于咱们这种全量维度表,你每天往这个临时表放的就是啥。最新一天的数据,最新一天的分区对不对,那对于你的拉链表呢,你这个临时表里放啥。N date等于9999的数据是不是放到这个分区里啊,对不对,你拉链表跟你的全量表不一样嘛,啊啊,那每个维子表是不是都有一个离子表了,那在我们的这个麒麟当中,那你说你去关联的时候应该怎么关联?
07:07
还让他去关联维度表吗?那肯定不了呀,关联谁呀?关联临时表是不是就行了呀?啊,让实时表去跟临时表关联,那这样一来,我是不是保证我们的实时表每天去照维度表的时候,拿到的都是最新的一份全量数据啊,就不会再有这种重复K问题了吧?能理解吧,啊,那咱们这个问题呢,嗯,那就得这么去解决啊,就得这么去解决啊,啊那这就是咱们在这儿呢,解决这个问题的这个思路啊,解决这个问题的方案。啊好,那到这儿呢,我们相当于就诶把这个方案呢,给大家介绍完了啊,那当然了,这种方案呢,咱们去做的时候呢,你需要在have当中,是不是还得再去建表,那建完表之后还得怎么,还得在我们阿兹卡的调度的工作流程当中,还得干啥呀,是不是还得再加上一步调度任务啊,对不对,那这个相对来说要麻烦一些,要麻烦一些啊,那咱们有没有更好一点的解决方案呢?有啊,看文档。
08:04
咱们打到这个2.2.5这一页啊,这是不是有一个使用进阶呀,对吧,那神阶第一个呢,就是咱们刚才说的那个全量维度表以及拉链表重复K问题啊,那这个问题怎么怎么解决呢?啊,这个问题的这个原因咱们已经分析完了啊,那怎么解决下边。两种方案。一种方案呢,就是在have当中创建维度表的临时表,那这个是不是刚才咱们已经说过了呀,对吧,那这个不再多说了,那方案二是啥呢?方案二呢,它与方案二,方案一的思路是相同的,但是呢,这边我没有真正的去见物理表,我没有真正去建临时表,没见临时表啊,那我用的是啥呢?用的是视图,哎,VU啊视图。啊,那视图这个东西大家有没有有没有这个概念。知不知道什么叫视图啊?咱们学买三个的时候,有没有讲过视图的概念?有没有讲过?好像讲过,但是又记不起来了是吧,再说一下这个没讲过是吧?没讲过呢,咱们就来说一下这个视图是什么东西啊,所谓视图呢,你就可以把它理解成一张虚拟的表。
09:12
这张表当中呢,有字段。你也可以从这张表里去select字段。啊,但是这张表下面呢,它不会有啥呀,不会有数据进行存储的,不会有数据存储,就是一张虚拟的表啊,而且这张表里边的数据呢,是一个动态的啊,它不是固定的,因为它下面时候没有数据啊,对吧,那数据什么时候来,你什么时候用这个视图,我什么时候去找数据,能理解吧?啊什么时候用这个视图,我什么时候去找数据,那所以说这个视图下边数据呢,不是固定的,它是一个动态的啊,是一张虚拟表啊,里边不会有真正的数据,它就是一个这样的东西。啊,那这个视图我们创建的时候怎么创建啊,大致的语法是这样的,我们看一下啊。语法是这样的啊,你不用管这个内容啊,你就看这个语法是什么样的来,语法是create view you,然后后边的是不是加上一个视图名字啊,对吧?视图名字叫什么,你比如随便写就跟一张表名一样啊,随便写这是create尾加这个视图名,然后后边呢,你不用写字段啊,你不用不用咱们建表的时候应该是create table,然后后边有什么ID in,什么name,是不是写那些字段呀,对吧,试图不要写字段,写什么呢?写后边有一个as as,后边呢,加一条完整的circle。
10:24
你这个circle是不是会肯定会返回一个数据啊,对吧,你circleq是不是肯定会返数据,那你这个circleq返回的数据就是谁呀?就是你这个尾U,就是你这个虚拟表下边的数据。能理解吧,那也就是说我们每次从这个试图从这个维U当中去查数据,那都相当于干啥呀。你比如说我现在select from这个,那就相当于执行了哪条语句。是不是执行了后边你建视图的时候,后边指定那个语句啊,对吧,就是你每次使用视图都相当于会把后边那个circle重新执行一遍。
11:02
能理解吧,所以你视图当中的数据是不是应该是动态的呀,对不对,那所以说在这呢,我们就可以借助视图的这个特性去解决咱们这这个问题啊,就是你看这个具体怎么创建啊来,那这个视图咱们怎么建呢?比如说以谁为例啊,以拉链表为例,拉链表是咱们这个用户拉链表,对吧,那我要想解决这个问题,我这个视图怎么建呀,你看。是不是create view you,是不是这张表后边as as select星、from dwddam user for,这时咱们拉的表,然后你的过滤条件是啥呀?Where and date等于9999。诶,你看啊,那这样一来能实现一个什么样的效果。我是不是每天咱们视时表都要去跟这个,呃,注意啊,你要见了视图之后,那我们的视时表注意啊师表去照的时候还照应维度表吗?照谁是不是照视图就行了呀,照视图,那我是表每天跟这个视图照唤的时候,每天照的时候,那其实都相当于干什么,是不是相当于把后边这张搜狗重新执行了一下,那每天是不是都重新过滤N等于9999,那你每天获取到的是不是都是全量最新的数据。
12:10
这个没错吧,啊,相当于一个动态的过程了,你还需要像我们那个方案一那样去建表,然后每天给它往里边insertright数据吗?用吗?不用啊,这个是不用的啊,那这是我们这个拉链表的视图的创建方法,哎,那我们的维度表还有另外一种就是那种全量维度表,那全量维度表咱们这个视图怎么建呀。就这么建就行,来create view view加啥加上一个,哎,是这个视图的名字,后边也是as as后边也加一个select,那你说对于全量维度表来说,你的过滤条件应该怎么,能够实现什么样的效果呀?是不是应该把这个时间维度表当不是时间,就是把那个全量维度表当中最新一天的分区的数据拿到吧,是不是应该把最新一天的数据拿到,这个应该能理解对不对啊,应该能理解好,那关键是怎么拿到最新一天的数据。
13:03
怎么拿到?那是不是应该是VRDT分区等于前一天的日期就行了呀,对不对,那在have这个搜索当中怎么获取最新一天的前一天的日期啊,怎么获取啊。然后去。这个咋获取咋获取。怎么获取啊?怎么获取,哎,就这么获取,这不就告诉你了嘛,对吧,Date at card date减一,这是不是就获取了昨天的数据了呀,注意啊,这个card date不是我随便写的,这是我们have当中的一个时间,哎,函数或叫一个时间变量啊,你比如说我现在进入到还有客户端啊,我进来。稍等一下啊。就比较慢啊,那我进来之后呢,你比如说啊,我直接select current current。The date吧,对不对?来回说。
14:00
它直接能够返回咱们当天日期的,是不是就正好就是2020年10月31号啊,对不对,那今天是不是就三呃是呃30号30是不是就30号,那我减个一是不是就是昨天呢?那是不是这样一来,我这每天自动获取的就是前一天数据啊。没错吧,啊,那这很简单,那假如说啊,你不知道我们还有当中有这个函数。啊,不知道有他或者他压根就真的没有,那没有的话怎么办。我怎么获取前天日期啊。怎么获取啊?这是一条SQL语句啊,你要在soq语句当中怎么获取啊?要没有这个东西怎么办?还有东西你自己写一个行不行,能不能自已写一个自定义函数,Udf函数,自定义函数这个函数的功能不需要传参,就是直接获取前一天日期能不能获取到。可以吧,自定义U内函函数啊,函数当中你就写一个逻辑就行了,先获取当天日期对吧,会单日期之后呢,再减个一获取段日期给你返回是不是就行了,也就是这个东西即便没有自定义函数也能实现对吧?啊能实现这都是很灵活的东西啊,很灵活,大家这个思维要打开啊,要打开好,那所以咱们这有这个函数,我们直接用就行了,对吧?好,那现在我们需要把这俩视图呢,给它创建出来,我们现在这个Q当中是不是恰好就用到了一个拉链表,一个全量维度表啊,哎,那你们用它就行了呗,哎,那我问一下啊,那你说咱们那个地区维度表要不要建十组。
15:22
要不要?D区位,这不要地区维度表,我们是不是只有一份数据啊,它不会存在这种重复K问题的啊,所以它就不用了啊,那我们现在呢,先建一个拉链表的视图CTRLC来在have当中,我们需要进到哪进到机贸里边对吧?柚子机貌啊好,那把这个视图创建出来回车,好那现在啊,你就可以直接SE。Select星,然后呢,你就可以辅照咱们这个是不是这个视图了,这就你把当一张表就行啊,那么比如说加limit limit10吧,你会发现你查出来的所有数据结束日期都是啥。都是9999能理解吧,好,那这块我们相当于呃,完成了这一步了啊,那接下来我们创建下一个视图,那下一个视图本来啊,咱们在生长环下,是不是应该是通过这种方式去创建呀,对不对,但因为咱们现在比较特殊,咱们特殊在哪啊,我们日期是不是六月15,六月14的呀,咱们让他获取前一天是不是获取的是29号的数据,咱们有那一天吗?没有,所以咱们这儿呢,为了演示这个效果啊,我们就把这个日期写死能理解吧,咱们获取15号的数据,咱们写死获取15号的啊,我先把这个日期改一下。
16:28
啊,Ctrl a把这个删掉。来,咱们把这个CTRLV拿过来,把日期改一下,我们要获取的6月15号最新一天啊,六月15啊,你要生产回来是不是不能这样写啊,你得咋写,是不是得按照咱们文档上这个写法去写呀,过去前一天啊,这个记住就行啊好,那把这个也创写出来,好那SE来星那from。From谁from这个视图你得到是不是就是15号的数据来回车。走啊,15号的数据,咱们拿到那个日期不太好看出来,但绝对就是15号的数据啊啊,那相当于我们完成了这俩视图创建了啊啊那那这个视图创建完之后呢,那接下来咱们需要怎么做呀。
17:08
是不是需要重新构建咱们那个Q呗呀,对不对,重新构建呀,为什么?因为咱们那个model啊等等,这是不是都是有问题的呀,咱们表是不是都都找你错了呀,对不对?那所以说我们现在需要怎么做呀,需要咱们先把新的表导进来啊,咱们先找新的表那个这个加快一点时间啊,五分钟应该能搞定啊,我们接下来找到model从哪找表来着,Data source对吧?咱们需要把这个新导进来的表拿过来,咱们还是收哦,咱们点谁点击这个view对吧,把他俩找进来,点点这会是不是能获取到啊,OK,到时之后这里边是不是有些表咱们用不到了呀,对不对,用不到咱们就可以去掉了,比如说SQ引份不要点,咱们怎么去掉,点它一下,右上角是不是有一个unload的呀,那就点击unload.yes。哎,这容易发现你安不了,为什么呀,他说了说什么这个表是不是已经被这个model用了呀,对吧,那咱们这个model是不是正常也是有问题的人呀,对吧,也是错的表转错了嘛,咱就不要它了,对吧,怎么样怎么办,删了就是不是就行,那你就删掉,哎,Drop哎点yes,但是你发现也删不了,为啥也删不了,他说这个猫的时候被这个cube用着呢呀,对吧,那个cube是不是也是错的呀,对吧,那错了咱们也给它删了,那删怎么删,是不是也是drop吧drop.yes你会发译也删不了啊为啥也删不了,他说什么呀,因为现在后边是不是有一个失败的任务在用这个Q呗呀,呃,为啥也那也删,为啥因为失败是不是你有可能还会让他重试啊对吧,重是不是还会用,那所以说这时候你还得把那个任务给它怎么办?给他杀掉啊点点谁discard的resume是重重呃这个重重新提交对吧,那这个discard是这个这个取消啊取消那yes完之后变黑了,对变黑了没用,咱们就可以drop掉了,删除,那删了它之后谁就能删了,Cube就能删了啊cube能删了那。
18:49
删model的就能删了,来我们点击drop猫都能删了,那谁就能删了呀,是不是那个表就能删了呀,来他就能按了点yes,那完之后下边还有一个。
19:00
还有一个是谁啊,呃,His这个表对吧,咱们也可以,呃,给他干掉了行,那剩下的是不是就是咱们需要的那四张表了呀,那当然现在我们相当于啥也没做这半天啊,就回到原点了是吧?啊,那现在我快速的把这个model跟cube咱们见一下啊呃,两三分钟应该能搞定,大家这个坚持一下啊,来,我就不再这个重复了,我就直接见了啊来起名字。先写猫豆,咱们叫做order detail detail。Data给的,然后呢,叫做这个star star好那下一步好,那选择实时表啊,选实时表点来大家跟我一起看啊,来这个哪出错了及时提醒我啊,为U,然后加连接条件user ID,找到ID点击OK,下一个点实时表,那下一个维度表,那照条件这个是province ID。那这边呢是ID点击OK啊错了,及时提醒啊,来找这个他,然后下一个带SKU了,对吧?呃,SKU在这呢,来点击。
20:00
SKID,那这个点ID好,那点击这个OK,是不是三张维度表都占上了,下一步下步呢,我们选择对应的维度字段,还跟刚才一样就行啊,那这边真的user level,那这个呢,我们选择呃,Province name,还有region name,那下面呢,我们选里边的呃,PU的名称,三个品类的名称,品牌的名称,没错吧,下一步那这个选谁度量值,我们把这几个都选上一二。这个三,然后四还有一个SQ number啊,DT是不是不能选啊,然后还少一个对吧,少一个a re是不是有它,那点击下一步啊,完了分区表我们选择它,呃,分区字段呢,选择DT,那这个选上点击C保存yes好,它完事了啊,那我们再点击这个Q吧啊来我们新建一个Q吧,这个就快了啊来我们诶不是它啊close咱们点new啊点点Q吧,然后选model model之后呢,还选刚才那个Q吧,然后之后呢,下一步选维度,维度呢我们还选刚才那几个,一个是真的啊一这个都选normal啊那他俩。
21:04
啊,都选no。点上啊,都选normal啊,那最后一个随便选一个品牌,诶选normal没错吧,那点击OK,四个选上,然后下一步这个的咱们直接批量添加就行,对吧?选萨字段全写上,点击OK,那完了之后呢,这个下一步这块是不用配下一步,这块不用配下一步啊,那这块呢,也是下一步啊,是不是完事了,点击C有保存啊,点击yes,好,那现在我们是不是又可以提交了,点击build完了之后呢,选日期,我们还选15号啊,选择dream,然后15,嗯,零零,那这个呢,选择这个准啊,然后呢,16,然后零零,然后现在是不是可以提交了,点击submit提交好,那这时候呢,我们就等他计算就行了,这个应该正常情况下不会报错了,好,那我把视频录一下。
我来说两句