clickhouse数据类型

UUID

uuid类型可以求min,max,计数,但是不能sum

1-- 创建表
CREATE TABLE t_uuid (id UUID, name String) ENGINE=TinyLog
-- 插入数据
INSERT INTO t_uuid SELECT generateUUIDv4(), '张三'
-- 查询数据
SELECT * FROM t_uuid
-- 测试函数
SELECT min(id),name FROM t_uuid group by id,name;
┌───────────────────────────────────id─┬─name─┐
│ d1a17b22-cfe9-4382-b9f3-6d34e5509a19 │ 张三 │
└──────────────────────────────────────┴──────┘
SELECT sum(id),name FROM t_uuid
--- 如下出错
Code: 43. DB::Exception: Received from localhost:9009. DB::Exception: Illegal type UUID of argument for aggregate function sum.

Datetime64

--创建表
CREATE TABLE dt (`timestamp` DateTime64(3, 'Asia/Shanghai'),`event_id` UInt8) ENGINE = TinyLog;
-- 插入时间
INSERT INTO dt Values (1604321946067, 1), ('2020-11-02 20:58:54', 2)
--查询
SELECT * FROM dt
┌───────────────timestamp─┬─event_id─┐
│ 2020-11-02 20:59:06.0671 │
│ 2020-11-02 20:58:54.0002 │
└─────────────────────────┴──────────┘
--获取一个时区 DateTime64-类型值:
SELECT toDateTime64(now(), 3, 'Asia/Shanghai') AS column, toTypeName(column) AS x
-- 时区转换
SELECT toDateTime64(timestamp, 3, 'Europe/Moscow') as mos_time,FROM dt
-- 过滤出 DateTime64 值
SELECT * FROM dt WHERE timestamp = toDateTime64('2020-11-02 20:58:54', 3, 'Asia/Shanghai')

Decimal

有符号的定点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入)。

--保留四位小数
SELECT toDecimal32(200, 4) AS x, x / 3;
+--------+------------------------------+
|x       |divide(toDecimal32(200, 4), 3)|
+--------+------------------------------+
|200.0000|66.6666                       |
+--------+------------------------------+
--保留两位小数
select  toDecimal32(200,2);
+-------------------+
|toDecimal32(200, 2)|
+-------------------+
|200.00             |
+-------------------+

Float32,Float64

将固定精度的数字转换为整数值,例如货币数量或页面加载时间用毫秒为单位表示

  • Float32 - float
  • Float64 - double
---对浮点数进行计算可能引起四舍五入的误差。
SELECT 1 - 0.9
+-------------------+
|minus(1, 0.9)      |
+-------------------+
|0.09999999999999998|
+-------------------+

Tuple

元组,其中每个元素都有单独的类型

不能在表中存储元组(除了内存表)。它们可以用于临时列分组。

-- 创建元组
SELECT tuple(1,'a') AS x, toTypeName(x);

┌─x───────┬─toTypeName(tuple(1, 'a'))─┐
│ (1,'a') │ Tuple(UInt8, String)      │
└─────────┴───────────────────────────┘

select  tuple(1,'a','b') as x,toTypeName(x);
+-----------+------------------------------+
|x          |toTypeName(tuple(1, 'a', 'b'))|
+-----------+------------------------------+
|(1,'a','b')|Tuple(UInt8, String, String)  |
+-----------+------------------------------+


-- 自动数据类型检测示例
SELECT tuple(1, NULL) AS x, toTypeName(x)

┌─x────────┬─toTypeName(tuple(1, NULL))──────┐
│ (1,NULL) │ Tuple(UInt8, Nullable(Nothing)) │
└──────────┴─────────────────────────────────┘

SELECT tuple(1, NULL) AS x, toTypeName(x) as y;
+--------+-------------------------------+
|x       |y                              |
+--------+-------------------------------+
|(1,NULL)|Tuple(UInt8, Nullable(Nothing))|
+--------+-------------------------------+

-- as可以省略
SELECT tuple(1, NULL) x, toTypeName(x)  y;

UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64

整型范围

- Int8-[-128:127]
- Int16-[-32768:32767]
- Int32-[-2147483648:2147483647]
- Int64-[-9223372036854775808:9223372036854775807]

无符号整型范围

- UInt8-[0:255]
- UInt16-[0:65535]
- UInt32-[0:4294967295]
- UInt64-[0:18446744073709551615]

可为空(类型名称)

允许用特殊标记 (NULL) 表示«缺失值»,可以与 TypeName 的正常值存放一起。例如,Nullable(Int8) 类型的列可以存储 Int8 类型值,而没有值的行将存储 NULL

create table t_null
(
    x Int8,
    y Nullable(INT)
) ENGINE TinyLog;
insert into t_null values (1,null),(2,3);
select *
from t_null;

+-+----+
|x|y   |
+-+----+
|1|NULL|
|2|3   |
+-+----+
-- 报错,内型不匹配,因为建表定义了Int
insert into  t_null values (1,'ce');

字符串

字符串可以任意长度的。它可以包含任意的字节集,包含空字节。

布尔值

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

数组

T 类型元素组成的数组。

T 可以是任意类型,包含数组类型。 但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。

-- 创建数组
array(T) 或者[]

SELECT array(1, 2) AS x, toTypeName(x);
+-----+-----------------------+
|x    |toTypeName(array(1, 2))|
+-----+-----------------------+
|[1,2]|Array(UInt8)           |
+-----+-----------------------+

-- 自动数据类型检测示例:
SELECT array(1, 2, NULL) AS x, toTypeName(x);
+----------+-----------------------------+
|x         |toTypeName(array(1, 2, NULL))|
+----------+-----------------------------+
|[1,2,NULL]|Array(Nullable(UInt8))       |
+----------+-----------------------------+

-- 如果数据值不同会出错,因为array类型里面的数据类型要一致,比如都是整数
SELECT array(1, 'a')

SELECT [1, 'a']

Received exception from server (version 20.5.2):
Code: 386. DB::Exception: Received from localhost:9009. DB::Exception: There is no supertype for types UInt8, String because some of them are String/FixedString and some of them are not.

--数组还可以这么表示
select [1,2] as x,toTypeName(x);
+-----+------------------+
|x    |toTypeName([1, 2])|
+-----+------------------+
|[1,2]|Array(UInt8)      |
+-----+------------------+

总结

  • clickhouse的数据类型还是非常丰富的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值