00:01
前面我们尝试的用渲染的方式来操作,但毕竟还是要写一些代码对吧?啊,写DF等等这些可能不太方便,那如果我们能够用S的方式来操作,那就很舒服了啊,那它也是支持的,那么接下来我们来做啊,第一个呢,就是由于我们要启动一个Spark circle的这么一个交互式的命令行客户端,呃,所以呢,它会默认会去连接have的啊,所以我们需要呃,需要做的就是将hi的原数据服务启动起来,那这边就要求你hi的原数据服务是配置为外置的单独的服务,而不是默认的内嵌啊,什么意思呢?啊,说白了就是你的have,你看一下。在这里有这个东西。Ma store的uri啊,如果配了这个就表示它需要单独启动的一个原数据的外置服务啊,9083啊行,那我们起一下呗,啊啊去哪个路径都行啊,我配的环境变量的啊啊我直接弄呃,我直接后台启动吧,Type杠杠service store啊我日志也不要了,那些我就不管了啊。
01:24
好,那接下来我们看一下端口监听了没有,9083。好,现在已经是监听状态啊,这个metato服务应该是启动起来了,那接下来我们就要启动这个Spark circle这么一个客户端就可以了,那同样要指定三个配置啊,第一个k r yo,第二个catog啊,第三个就extension,那么catalog还是忽底提供的catalog,那extension呢,用的是底的。那为什么会用到have呢?其实跟这个catalog有关系,那么大家知道什么叫catalog吗?啊,学过的应该都知道啊,Catalog直接翻译是目录的意思啊,那如果我们简单的也不讲那些专业术语,简单来讲就是在数据库之上的一层,呃,抽象也就是说先有catalog,再有catalog里面的什么呢?数据库叫database啊,比如说哪个库哪个库,那我们知道每个库里面是不是有一张一张的table啊啊,这是常规的一个组织关系,对吧?啊,以前大家都说诶哪个库哪哪张表没问题,那现在再多一层叫catalog啊,那外部系统,比如说Spark就可以通过这种catalog的东西,也比如说跟hi去做一个打通啊。
02:41
他有一个开头,老。好,那这边忽底它默认实现忽底catalog,其实它用的就是底层源码,用的是have catalog啊,所以这也是为什么如果你不启动hi这个东西,你直接去启动啊,会报错什么原数据服务什么啊,拒绝连接呀,无法实例化原数据啊这些东西啊,那是因为这个事儿啊,行啊,那如果你的机器上面没有装have,你就简单装一下呗啊,那装完之后最好配一下环境变量,这样的话你就不用做额外的操作了,如果没有hi环境变量啊,也就这个时候你要手动拷贝你的hi配置文件到Spark的。
03:26
配置目录下,说白了就一句话,你要能够让Spark能读取到have的配置就可以了啊,要么你配环境变量,要么你拷贝呃,它的配置文件,好吧,那我现在是只要原数据服务启动的啊,我环境是能读到have那个配置的。所以我直接就。输入命令来启动我的Spark circle,你看它这里是不是会读取什么,Have com have com。好吧,啊,那这个时候就进来了,这个时候我比如说我受贝塔贝斯。
04:02
呃。看一眼,那么大家能看到有这么多库对不对啊,这些其实是我的什么,我的hi当中的存在的一些啊,这是我在hi当中存在的一些数据库啊,这是help的库啊好,这个就是我们Spark circle的启动方式啊,那接下来我们讲一下这个建表语句啊在呃,简单先下面看一个例子吧,啊,就是正常的写一个DDR啊DDR那就是create table,然后定义字段的类型啊就行了,那无非是在后面加一个什么UC忽底啊,表示为是忽Di表啊,忽底格式的表。另外呢,可以通过指定一些表的参数来指定忽底相关参数,像比如说最常见的是这三个,第一个呢是type,也就是说表的类型,你是Mo还是Co,在这边可以去做一个指定,默认不指定的话都是cow,我们在前面渲的时候并没有指定什么表类型,对不对,那是因为默认就是Co啊。
05:04
默认的啊,默认另外一个primary key,这个就等于什么呢?这个就是所谓的record key啊,就是我们的记录键啊,在这里体现为一个组件是吧,这个就是record key,那还有一个预合并啊,预聚合的字段,这个我们说了主要是说诶我组件相同啊,这个时候该取哪一条数据去重的时候,对吧?啊以指定的预合并字段值大的为准啊,那一般我们用时间戳会更好一点。好,这个就是一一些建表参数啊,那这个组件如果我们不指定的话,它默认是取得UUID啊,一个随唯一的随机值啊。好了,这个就是我们,那我们尝试建一个吧啊。那比如说我们先来创建一个非分区表,这个地方呢,我们建一个cow表。
06:01
呃,那你看我这个语法只起了表明指定的字段,Using的who,后面那个表参数都不指定,也就是说这个时候我用的都是什么,都是默认值,默认值呢就是Co表,默认的组件就是UID,那默认的预句和字段就是没有啊,就是没有啊,就这个意思啊,来,我们来执行一下啊,呃,我们创建一个database吧的database啊,Sparkdi吧。好,又是Spark里啊,当然你这个库无所谓啊,你看心情啊,好,那我show tables。你看这张表就好了吧,啊,你DSC一下啊。对吧?啊,那这张表我们建表时指定的这三个字段啊,你看是三个字啊,三个字段吧,U ID name price,然后呢,我们说了who表它有个特点,就是最前面会有五个隐藏列啊,那分别是什么?提交时间,提交序列号啊,呃,Record key啊,分区路径。
07:16
还有文件名啊,这五个。OK,这个就是一个简单的建表,那接下来来我们建一个Mo的非分区表,怎么建呢?那简单前面都一样,我不啰嗦了啊,咱们快速过,那就是表属性,然后呢,类型为MO2啊,那指定组件为ID字段啊,指定预合并为TS字段啊,这个是最完整的一个写法啊啊,这个同样直接拿过来啊。好,So tables对吧,啊DSC啊这个。对吧,前面同样有五个什么隐藏列,而且默认类型都是string啊,都是string。
08:03
那么如果我们要创建分区表,用怎么样的语法呢?啊,也简单了解一下,那如果是个分区表呢,无非就是大家注意位置啊,是写在后面啊,写在后面,那么这个表属性是在分区语法的前面啊,也就是说前面这个是我们刚刚试过的,只要在后面加上一个帕提的啊,那分区字段可以是多个字段,表示多级分区啊,就多级目录啊。那道大家注意,这个分区这个关键词是有ED结尾的啊,不要忘了啊,大家容易忘这个事儿啊,有ED呃,然后呢,可以指定什么表的路径,这是表路径,这个跟hi的写法有点像吧啊,所以对于大家来讲没有什么学习成本啊。嗯。好吧,好,那我就手动敲一下吧啊,比如说我的分区要按照DT跟HH啊。
09:03
来做一个分区来爬梯身的啊,然后呢。呃,DTHH对吧,这样就行了啊,然后呢,来一个location。啊location,然后呢单引号就可以了,那location的位置我还是用这个吧,啊这个这个我就不再去敲了,路径表明这种最好粘贴这样子啊,就指定为我表路径为这个地方,这个也是可以指定的啊好分号回车。那这个时候这张表就建好了,我们DC一下啊。这呃,你看那现在DC我们都看到了一个什么分区信息啊,由为我们指定了两个分区字段啊。好,回头我们去插入数据的时候再来去看。那还有一种用的方式,就是在我们已经存在的护底表再创建一张新表啊这种东西呢。
10:04
你可能以为是CTA对吧。什么叫CS呢?就是什么create table,然后呢,S或者like这种。嗯,主要是赖吧。但呃是支持没错啊,这个是后面,呃后面咱们来讲。那还有一种用的方式,就是我直接指定什么这个location。因为这个路径是已经存在了,那这个时候呢,呃,我们不需要再去指定什么字段呢,还有表属性这些东西,为什么呢?因为它可以自动识别模式,还有配置,因为大家还记得吧,我们说表路径下面会有什么。表路径下面会存储了咱们的原数据信息,还记得吧,因为它有一个点什么点忽底,呃,来我们来看一下吧,我看我前面应该有了,像tmp护理下面有啊。
11:01
天僻秃顶啊,现在还没还没有啊,现在我没有,因为没有生成,还没有生成,还没有插入数据啊,只是做了一个DDR,前面这个,比如说这个吧。嗯,那我们正常,那我们就看已有的这张表呗,啊,我们之前谢雅建的这张表也可以啊,啊这个时候你说诶这也没看到那个点护的啊,你不要忘了,你在Linux里面你是不是要干嘛点的话,是不是表示隐藏啊啊所以你是L-al呗,你看这是不是就有点固定了啊,也就是说其实表路径下面它就有啥呢,就有一个元数据了啊,所以咱们直接指定到location,它就会自动识别模式,还有咱们的配置,那如果你不要分区,那你就不要写分区呗,要分区你就爬梯升拜就可以了。就这么简单啊,好比如说非分区表,哎,咱把它拿过来。他就报错了,为什么呢?他应该是报路径找不到啊。
12:05
你还?他找不到这个表的什么stemmer,因为因为咱们指定这个location并不存在啊,它里面的原数据也读不到,那这张表它就建不起来,那下面这个同样的道理啊,回头有数据了,我们再来尝试着去建呗,啊你就知道这么一回事,另外一个就是所谓的CTA as,就是什么呢?Create table,然后S。啊S,那就是将一个表的查询结果啊。将它作为我的表啊。这个语法我们应该是特别常见嘛,这种就是CASS嘛,啊create tables,然后select啊好。呃,另外大家注意它CTA ass这种语法的话,它是用批量插入作为写操作的啊啊批量插入也就是说帮将整个结果集一次性插入咱们这个table啊好,那CTA ass呢,咱们这边举了三种例子对吧?啊分别是什么呢?啊,比如说我创建cow非分区表,那说白了就是还是那几件事儿啊,你表属性要不要指定太盘要不要指定主键,要不要指定愈合并对吧?啊另外呢,就是要不要有爬提升拜字段啊就这几个都可以啊,都灵活来设啊,那么你看下面就是既有type又有组件又有。
13:24
啊,一居合又有分区,这个是最完整的对吧。好,那这边哦,对,有一个事要提醒,就是咱们have建表的时候啊,比如说呃,我们是不是create table啊,然后比如说ID name啊,Age,然后完事之后是不是一个part by,对吧,比如说DT啊,这个时候我们的分区字段是不是不会写在进表的字段列表当中啊。对吧,这是额外的一个字段是不是,但是在护理当中我们是这样的啊,如果你要以这个DT为为那个的话,那就是ID name啊,Age dt之后呢,再去part t升BY啊,某某啊,就是说你这个分区字段必须出现在你的定义的字段列表当中啊。
14:17
好。那其他就没什么了,那这个我们就快速做呗,啊,那比如说这张表啊。呃,我们只指定一个组件对吧,为ID,那么不指定就是默认cow啊啊就是将这么一行固定的数据插入就行了啊行,那么执行呗。嗯。那你看点忽地看到没有啊。对。
15:01
你看就能查到这么一条数据了,对不对啊,1AE10啊,那前面五个是隐藏列啊隐藏列。好了。那么大家注意一下,我是不是没有指定location啊,没有指定location它默认会保存到哪里去啊,诶大家注意看这个地地方啊。O BT Mo Spark,然后Spark house Spark d.DB啊这个表明对吧,也就是说这个是按照Spark的默认那个配置路径来的啊。好了,那就快速的再来一个完整的有type,有组件,有合并字段,有分区字段啊,其实效果一样啊,咱们就简单的去创建一下就好了。好,那直接。
16:01
那你看数据也有了吧啊。好,这个就是CTA as,那还有一种呢,CTA as还可以什么用location的方式来加载,咱们前面讲的这个location是不是包含了什么呢?包含了一些属性配置,还有质量信息啊,那比如说你要创建一张内部表啊。所谓内部表是咱们自己说的啊,那U型就是什么呢?趴毁大家注意这边不是忽底了啊,如果你写的是忽底,那是一种外部表,什么叫外部表呢?外部表达意思就是说我数据的路径啊,可能在某个地方我单独指定就行了,我的DDL建表只是一个一个一个一一个建表语句原数据而已。好,那location可能是某个地方的pocket对吧?啊,那如果是通过CTA as加载数据那出呃,你可以用who底,然后location之后可以去单独指定一些配置啊,这个咱们就了解一下就行啊啊part办,然后呢再去sli。
17:09
它是不是也是as select as select就将这个数据加载到这张表里面。那其实相当于就是什么,就是说一些属性我要自己来定义,而不是使用默认配置,就这样而已吧。这个是简单说一下这个CTA的用法啊。
我来说两句