00:00
好,那么刚才安装完的单机版,那我们来看看数据类型,哦对,其实这个安装大家要注意一个事儿,咱们单机安装是没有启动主题板,没谈到这个对吧,那你想想集群。集群模式需不需要一个协调者呢?你互相之间不认识那怎么行啊,是不是得有一个中间协调者呀?所以click house它是依赖于主keepper,主keepper那由于咱们安装的是单机版,所以并没有去强调主皮本的事儿,但是大家要明白啊。如果咱们是集群模式,主keep本是要启动的,它相关的数据等等,这还有副本表相关的一些东西啊,它是需要依赖主keep本的啊,那咱们后续再聊啊,那我们看一下数据类型。行,那为什么要单独讲一个这个呢?因为它的那个类型还不太一样,就它的写法不太一样,名称不太一样,但是其实用法差不多啊,来,我们挨个来瞅一瞅呢,换汤不换药啊,一个是整形。
01:07
数值的整形对吧,它分为两大类,一类是什么呢?有符号的,一类是无符号的,有符号就是有正有负,无符号就全是正了。啊,从零开始的啊,那我们来看看整形的范围,首先它有一个类型叫INT8。还有什么INT16 int32 int6464,这些分别什么呢?咱们跟Java的一些类型类比起来,它后面的数字是什么意思呢?位数。位数。那么大家想想,八位。Java里面什么类型啊。是不是有一个东西叫bit?它是不是八八位啊,对吧,那这个对应的就是它那16呢,是不是一个salt salt是不是两个字节啊,所以它是不是应该是16比特16位嘛,那同样的道理,23。
02:06
二不是23 32是int int是不是四个字节?四个bit嘛,那是不是32步呀。那同样的六四是什么呢?大家都懂了,Long嘛,它八个字节嘛,八个字节是不是八乘以八是不是64,对呀,所以大家要知道咱们它并没有什么int tiny int big int什么long这种东西没有啊,它统一通通叫做int,但是后面的数字不一样啊,那它的取值范围跟咱们传统那些是一样的,你瞅一眼就行了,好吧,这个咱们不用去看了,其实就是二的。N减一次方减一正负对吧,在这个范围里面啊。N就是位数啊。你把这个做一个类比就行了,所以大家最常用的应该是哪一些啊,应该是这两个,还有这个salt,咱们相对来讲还用的少一点,对吧,这个表示一个字节的。
03:04
那这个就是咱们常用的int类型,这个就是咱们常用的long类型,一个是八,一个32,一个64,好吧,那除了这个,它还有一种类型叫无符号的整形范围,也就是说它是从零开始的,那它怎么区别呢?前面加个U就行了。U in的八。那我们说。它是不是二的八次方啊,减一啊,是不是等于255。对吧,其实你看有符号位是多少,负的128~127,那无符号无非就是什么,是把这一部分负数挪到正数的部分,你看幺七加128是不是刚好255啊,对吧,这个就是无符号的,你就记得就行了啊这个U。这是一个整形啊,那还有一个浮点型,浮点型是什么?有小数点的呗,Float跟double是不是咱们最常用的一样的道理,它并没有double这种名称,这种写法,那它是什么呢?
04:07
F3的FLOOR64数字同样是一个位数,咱们F体字节啊,Java里面是不是四个字节啊。那弄是不是八字节。那你再把它转成一个位数,四乘八是这个是不是32位,那个八乘八是不是64位。对吧,就这个而已,所以大家记住你要用double是FLOAT64啊,普通的float就是FLOAT32这个而已,那关于这个什么精度误差,这个大家应该也了解了。比如说咱们经常用的一个什么,呃,Double,我们在生产环境,比如说跟钱相关的,你会用double存吗?如果你用double存,说明你完全没经验。因为double它这种浮点型是不是有一个精度丢失的问题啊。
05:00
对吧,你看下面是一个例子啊,1.0减去0.9。是不是讲道理应该是0.1啊,但由于它的存储原理,它底层是不是会精度丢失啊。你看它变成了什么,0.09999998对吧,所以咱们一般在企业里面存钱的时候,咱们不会存double跟金钱相关的,不会啊不会会存什么呢?Disc啊有继续看呗,呃。那你看布尔类型。就true or false嘛,它没有,那怎么办呢?咱们可以用一个标志位嘛,零表示什么呢?FALSE1表示处是不是就可以了,哎,它就是这么来啊,那它我们一般用什么呢?用u int8。INT8是八位啊。八位是啥呀?还记得吗?刚刚讲的是不是一个相当于一字节啊?对吧,一字节,然后是不是八位啊,那它是一个无符号位的,因为你从零开始嘛,然后呢,因为这已经是最小的一个整形了,对吧,那你要么零要么一。
06:08
你就取值为零或一,零表示false,一表示出就行了啊,包括你的一些参数设置,它也是零一来表示啊,没有处和false啊,这个要记住不一样的地方,还有一个decim,咱们刚才聊了double flow那种浮典型精度丢失的问题,那咱们在实际应用跟前相关都是用的IM,呃,它呢能咱们hi是不是还有一个叫big Dis。对吧。啊,这个应该大家呃分析过用过应该都了解,它能保持一个精度,那这边有三种啊。DIS32 dec64 disim128。那里面传了一个参数啊,里面有一个数字啊,比如说你这种是什么意思呢。如果是三二,它对应的是一共九位,什么叫九位?我举个例子啊,我给一个啊,我单独写吧,比如说我这边有一个数字。
07:11
我再把它补充一下啊啊这边比如说有个数字是123.123123123,那如果是我们的呃,DECIM32,比如说我给个五,那是什么呢?表示一共九位嘛,就整数加小数。一共九位啊。喂。哎,喂呢。然后小数部分有多少啊,有五位是不是这个意思啊。对吧,那什么意思,它会取值是多少啊,它不会四舍五入,你看总数部分是九减S就九减五,是不是要保留四位啊,那你看这边是不是只有三位啊啊好,那就是123,然后小数后面保留五位,是不是这几个,所以应该就是多少啊,123.12312,他不会四舍五入啊,后面的怎么样直接干掉。
08:15
只保留这么多,好,那同样的道理,咱们那个六四呢。保留了是18位啊,一共保留18位,少数部分比如说也是五位的话,那其实也一样对吧啊。一样的道理啊,这个括号里面传的是小数,后面我要保留几位啊?那一共多少位也是限定死了,一共多少位也是限定死,同样的道理啊,那我们看还有一个128,表示一共有38位。括号里面小数的位数啊。那这个就是它的一个用法了。跟钱相关的汇率啊,利率啊等等,一定要保证一个精度啊,一定要保证精度。
09:04
这是一个DEC,那字符串呢,我们了解一下啊,字符串就比较简单了,一个string,它也有一个词string,呃,区分于什么ver差ver是不是my circle里面呢,对吧?表字符串啊,它不是,它也是一个string,跟have有点像啊,那还有一个face string后面有个N。这个是什么呢?固固定长度的啊,比如说我一个字符串是ABC。然后呢,我这个N传的是五。那是不是你一共只有三个不够五啊?那他会在后面添加空字节,凑够多少,凑够五个字节的长度啊,是这个意思啊,就你不够的我帮你。补全用什么补呢?用空的字字节来给你补。如果你的字。呃,内容大于数字呢。
10:01
他会报错会报错,那这种咱们会用的比较少啊,比较少,那一般用到固定长度的场景有这几个名称。我名称我一定固定给你这么多个字节,对吧,我管你每个人名字多少,不够你就补全啊,还有一些描述啊,字符星编码,就是一些特殊的场景呗。啊,咱们通常还是普通字符串会好一点啊,那还有一个枚举类型,枚举类型呢。它有一个八,一个16。他其实就保存一个描述关系呗。对吧,这枚举相信大家都很懂,你看这这个下面有个例子啊,比如说八是什么意思啊,呃,你你看字符串,然后跟一绑定了。这个word字符串跟二绑定了,那你建个表对吧。啊,我们来见表吧。来来来试一下吧,不然光讲也不行,看M好,嗯,然后呢,把建表语句拷过来,咱们就创建了一张表,它的类型是什么?是一个枚举,对吧?那接下来呢,我们来看看啊,呃。
11:16
我们再把做一个插入。你看我插入的是什么。是不字符串名字啊,那我们说它是不是跟数字有绑定关系啊,所以回头我们查出来是不是应该看到这个代表的是一,这个代表的是二,这个代表的是一呀,对吧?啊回车首先它可以插之后呢,我们在呃插插入一个什么呢?我们枚举之外的值啊,我改一下吧。比如说插入一个,哈哈,你想想这个值能找到绑定关系吗?没有吧,因为咱们在建表的时候只指定了这两个枚举类型好回车,你看是不是报错了。
12:04
未知的元素,哈哈,对谁来讲啊,对枚举类型来讲啊,它这个就差不了,那这个时候你带from t。是不是可以查到这个。查到咱们插入的值对吧。呃,你看那后面呢,还有一些简单应用,你看呃,如果要查看对应它的值,就咱们字符串对应的数值啊,咱们可以把它做一个转换呗,对吧,咱们来转换一下啊。X是字段名啊,字段咱们一开始建表就把它命名为X,然后cast是不是一个转换类型的函数啊,咱们把它转成INT8类型,因为一开始咱们的那是不是INT8呀。表示它跟整形是INT8的转换啊,那这个时候咱们就可以显示数值了,但一般你也不会去看这个对吧,一般不会去看这。
13:08
那我刚才通过直接插入数值是不是也可以啊,你看我插入了一个值一,它是不是也插入成功了,因为你直接插数字也可以,你再查一下这张表,你最后插入的一是不是展示成了一个什么。开楼啊,绑定关系嘛啊,这个没什么好讲的啊,但是这个大家要注意啊。呃,你把一个固定字符串是比字符串是比较长,那一个一啊,一个二啊,这种整形是比较小,空间上来讲。也就是说你字符串想存这么长的,其实只用一个数字表示就好,这些算是一个空间优化,对吧,想的很美,但是呢。如果你的数据要发生变化,那就不太好了。那可能还会出现一些问题啊,所以你看情况呗。不一定要用啊,这是一个枚举的一个用法,那同样的道理,咱们16。
14:05
不用讲了吧。跟这个道理是一样,只不过它存的整形是什么,16位的对吧,相当于什么一个salt。对吧。就是这个区别而已啊,那再看一个时间类型,时间类型你虽然简单,但大家要关注啊,你想想have里边存的时间类型。有,有哪些什么test date date对吧等等,那咱们通常have里面是不是存了一个string?那在我们click house不建议存时,对啊,因为它底层还会转换,毕竟不好,那这边它主要有三种,一种是只有年月日。一种是带有年月日,还有十分秒,还有一种除了秒,我还更具体带亚秒,也就毫秒呗。那分别是什么呢?就名字这个也特别好记啊,由短到长。
15:04
对吧,你从一个青青涩的人,青涩的小伙子,长成长成一个胡子邋遢的一个油腻中年对吧?嗯,你看啊,一个date名字最短的就是年月日,Date time就加上十分秒,Date time64对吧,加了一个六四位数64个,那它就是加上一个样秒,就后面会一个点多少多少多少。日期类型。这是一个日期类型,那还有一个数组。数组,它是一个什么?呃。Array,那这个array呢,其实咱们hi也有一个数组对吧,它也支持啊,那它可以指定一个类型,就是说我这个数组存储的必须是什么类型,对吧,也可以是嵌到的数组。但但是这个,嗯,克里house可能对那种嵌套的支持的不太好啊,支持不太好。
16:07
呃,而且咱们常用的这种合并数的里边,这种引擎的表里边,它不能够存储多维的一个数组,说白了你就用一层就行了,对吧,天这么热,你穿那么多层衣服什么意思啊,是吧,热不死你啊,行,咱们简单去。看一看就行了啊,比如说这个这个案例咱就不挑了,都比较简单啊,瞅一眼这里是没有查某张表对吧,那我们就是一些写死的值,一二这两个数字放在一个数组里,名字叫做X。对吧,那后面这个是一个函数什么意思,把当前字段的类型获取到。就这个意思啊,现在说我们看一下。你看对于X这个字段来讲,它存了两个数据,一二是一个数组吧,那我们看看它的类型呢?我们把类型打印获取到打印出来是什么瑞对吧?那里面限定为类型为INT8,那如果你要玩一玩也行,我说我混用行不行啊,我再加一个字符串。
17:12
既有整形也有字符串,你看会怎么样?是报错了呀?因为你同一个数组的类型得一样嘛,对吧。这就一个简单的数组啊,呃。除了这个array之外呢,你不想写这么麻烦也行,来咱们看这。你不写也行,你用什么,用一个中括号把它括起来就行,这都是一些常规用法啊。啊回车对吧,这就是一个数组的一个简单用法,那这个咱们了解到这儿,那还有如果有其他的结数据类型呢,咱们只是介绍了一些常用的,如果有其他你需要怎么办呢?去官网查,呃,咱们进入到官网对吧,我重新点吧。
18:04
啊,这是官网对吧,Click house点,然后点什么documention。文档。然后呢,你点到下面有一个。Circle reference参考。那这里面有一个啥呢。对,探。这个。你看这个数据类型就行,来点开,你看是不是还有其他的等等啊,你看原组是不是也支持啊,这个咱们讲过了,这个讲过了,这个讲过,这个讲过对吧?Map它也支持have是不是也有map结构它也有啊。还有这些什么整形啊,浮点啊,Decim啊,布尔啊,这些这些都讲过了啊,大概都覆盖到了,那这边我要单独拎一个出来,叫什么knowledgeable。空值。
19:00
空值往往是不同,呃,存储系统你要考虑的一个事儿,你想想咱们,呃,最最简单的一个例子,My circle该have,它底层存储now值一样吗?不一样呗。除了肯定不一样,这个大家都能猜到,呃,它是now对吧?那hi里面存的是什么?是不是斜杠啊N呢?所以你在做一些数据这两个之间的导入导出的时候得注意这个格式,那么柯里卡house呢?来我们看一下。存浪子。他怎么存呢?我们看一个note就好了。我先先不展开啊,如果英文你看的不舒服,它有些页面是提供的中文版,你看右上角。来你点开是不是有个中文的,但是有些内容它是没有翻译的,所以它会显示找不到页面啊。像这个肯定是有的。你看这句话,使用knowledgeable会对性能产生负面的影响。
20:02
所以咱们一般在实际运用的时候有一些空值,你不要让它成为now不好啊,这也是一个经验啊,那如果你要定义怎么定义呢?咱们简单看一下官网例子就好了。类型是不是一个什么knowledgeable。意思表示可以为闹啊,可以为now,那里面传一个具体的类型,它是INT8类型,对吧,INT8也可以存not,那不建议这么用啊,不建议这么用,那有些人可能你就会想,但我实际就是需要闹值,那怎么办?你做一个转换,比如说数值的闹。如果是数字类型INT8,你用什么来表示呢?我建议你用一些业务上没有意义的数字,比如说负一。当然了,如果你负一是前提是你正常数据不会出现负一的情况下,那你未来查询就是说查到负一哦,你就表示这个就是no对吧,相当于说你用一些值没有意义的值来替换啊,如果是字符串呢,你用什么来表示闹啊。
21:08
你可以。存一个空串对吧,也可以存一个字符串类型的闹也行,只要是主要是一个标志而已,你认得说这个东西表示闹就行了啊,那具体有什么负面影响呢?呃,咱们在高级部分会去介绍这个东西啊,那现在你知道就行。行,这是咱们数据类型啊。
我来说两句