clickhouse入门2-数据类型

整数类型

这里分为有符号整型和无符号整型,以下是它取值范围:

有符号整型:
Int8[-128 : 127]
Int16[-32768 : 32767]
Int32[-2147483648 : 2147483647]
Int64[-9223372036854775808 : 9223372036854775807]
Int128[-170141183460469231731687303715884105728 : 170141183460469231731687303715884105727]
Int256[-57896044618658097711785492504343953926634992332820282019728792003956564819968 : 57896044618658097711785492504343953926634992332820282019728792003956564819967]

无符号整型:
UInt8[0 : 255]
UInt16[0 : 65535]
UInt32[0 : 4294967295]
UInt64[0 : 18446744073709551615]
UInt128[0 : 340282366920938463463374607431768211455]
UInt256[0 : 115792089237316195423570985008687907853269984665640564039457584007913129639935]

示例:

create table test_int(co1 Int8,co2 Int16,co3 UInt8) engine=Memory;
insert into test_int values (-128,32767,255);

在这里插入图片描述

浮点数类型

float32:对应float类型
float64:对应double类型
-Inf:负无穷
Inf:正无穷
NaN:非数字

示例:

create tabel test_float(co1 Float32,co2 Flaot64)engine=Memory;
insert into test_float values (0.123456789,0.1234567890123456789);

在这里插入图片描述

这里需要注意float32和float64分别对应小数点后8位和16位有效数字,溢出来的精度会被四舍五入。

select (0.5/0) f1,(-0.5/0) f2,(0/0) f3;

在这里插入图片描述

decimal数据类型

写法:Decimal(P,S)
P - 精度。有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。
S - 规模。有效范围:[0:P],决定数字的小数部分中包含的小数位数。
P从[1:9]对应Decimal32(S) 
P从[10:18]对应Decimal64(S) 
P从[19:38]对应Decimal128(S)
对应取值范围:
Decimal32(S) -> ( -1 * 10^(9 - S),1*10^(9-S) )
Decimal64(S) -> ( -1 * 10^(18 - S),1*10^(18-S) )
Decimal128(S) -> ( -1 * 10^(38 - S),1*10^(38-S) )

示例:

create table test_decimal(co1 Decimal32(4),co2 Decimal64(5),co3 Decimal128(6))engine=Memory;
insert into test_decimal values (1,2,3);
select (co1+co2) as f1,toTypeName(f1), (co1*co3) as f2,toTypeName(f2) from test_decimal;

在这里插入图片描述
这里需要注意的是,decimal在进行四则运算的时候小数位数取最高的一个数字,乘法运算除外。两个数字相乘小数位数等于s1+s1的和。而精度都是取最高精度的一个数字。
另外小数位数超过当前限制,会导致精度溢出,这里溢出不会四舍五入,会直接丢弃掉。整数位数过多会直接报错。

布尔类型

没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 01

示例:

select (1==2) f1, (1==1) f2;

在这里插入图片描述

字符串

String:普通字符串,不限制长度
FixedString(N):固定长度N的字符串
UUID:16字节的数字,用于标识记录

示例:

create  table test_string(co1 String,co2 FixedString(4),co3 UUID)engine=Memory;
insert into test_string values ('sddfffssss','qwer',generateUUIDv4());

在这里插入图片描述

时间类型

Date32:返回yyyy-MM-dd格式
DateTime64(precision, [timezone]): 返回yyyy-MM-dd HH:mm:ss格式。precision表示时间刻度的分辨率(最大精度为8),timezone表示时区。DateTime64(8)表示0000-00-00 23:59:59.99999999.
日期:值的范围 => [1970-01-01, 2149-06-06]
日期时间:值的范围 => [1970-01-01 00:00:00, 2106-02-07 06:28:15]

示例:

create table test_date(co1 Date,co2 DateTime,co3 Date32,co4 DateTime64(3,'Asia/Shanghai'),co5 DateTime64(2,'America/Los_Angeles'))engine=Memory;
insert into test_date values ('2023-10-10','2023-10-10 10:00:00','2023-10-01','2023-10-10 10:00:00','2023-10-10 10:00:00'),(1692583808,1692583808,1692583808,1692583808000,169258380800);

在这里插入图片描述
这里需要注意的是:时间戳的书写,默认datetime类型时间戳是10位,但我指定test_date表中co4字段精度为3,则需要再在1692583808时间戳后面加三个0,co5也是如此。

数组类型

定义方式;array(T)或者[]
获取元素值:arrayElement(数组名称,下标索引)

示例:

SELECT array(1, 2, NULL) x ,['a','b'] y, arrayElement(y,1) z;

元组类型

tuple(T1, T2, ...)其中每个元素可以是不同类型
元组只能定义在内存表中,即engine=Memory

示例:

select tuple(1,'a') f,f.1,f.2;

在这里插入图片描述

嵌套数据结构

Nested关键字进行声明
只支持一级嵌套
MergeTree 引擎中不支持嵌套存储

示例:

create table test_nested(name String,age Int8, works Nested(id UInt8,localation String))engine=Memory;
insert into test_nested values('zs',22,[1],['bj']),('ls',23,[2,3],['sh','xn']);

在这里插入图片描述

低基度类型

通过LowCardinality关键字声明:LowCardinality(data_type)
其中data_type包括: String, FixedString, Date, DateTime,数字类型,但decimal类型除外。
ClickHouse会把 LowCardinality 所在的列进行字典编码。对很多应用来说,处理字典编码的数据可以显著的增加SELECT查询速度。

示例:

CREATE TABLE test_lc
(
    `id` UInt16,
    `name` LowCardinality(String)
)
ENGINE = MergeTree();

坐标数据类型

point:存储坐标(x,y),等效于tuple(Float64,Float64)
Ring:存储一组坐标,存储类型为一维数组
Polygon:存储一组坐标,存储类型为多维数组
MultiPolygon:存储一组坐标,存储类型为多维嵌套数组,他要比Polygon功能更强

示例:

create table test_geo(co1 Point,co2 Ring, co3 Polygon,co4 MultiPolygon)engine=Memory;
insert into test_geo values(
(10,10),
([(0, 0), (10, 0), (10, 10), (0, 10)]),
([[(20, 20), (50, 20), (50, 50), (20, 50)], [(30, 30), (50, 50), (50, 30)]]),
([[[(0, 0), (10, 0), (10, 10), (0, 10)]], [[(20, 20), (50, 20), (50, 50), (20, 50)],[(30, 30), (50, 50), (50, 30)]]])
);

在这里插入图片描述

map类型

Map(key, value) 可以存储 key:value 键值对类型的数据
key> 键值对的key,类型可以是:String, Integer, LowCardinality, 或者 FixedString.
value> 键值对的value,类型可以是:String, Integer, Array, LowCardinality, 或者 FixedString.

示例:

CREATE TABLE test_map (a Map(String, UInt64)) ENGINE=Memory;
INSERT INTO test_map VALUES ({'key1':1, 'key2':10}), ({'key1':2,'key2':20}), ({'key1':3,'key2':30});

在这里插入图片描述

IP地址类型

ipv4:更为紧凑的二进制存储IPv4地址的值,可以和UInt32类型相互转化
ipv6:更为紧凑的二进制存储IPv6地址的值,可以和FixedString(16)类型相互转化

示例:

create table sf_ip(co1 IPv4,co2 IPv6)engine=Memory;
insert into sf_ip values ('116.253.40.133','2001:44c8:129:2632:33:0:252:2');
转换方法:
CAST(co1 as UInt32)
CAST(co2 as FixedString(16))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值