ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
也是是一个数据分析的数据库,列式存储数据。
1.整型
有符号整型:Int8, Int16, Int32, Int64
无符号整型:UInt8, UInt16, UInt32, UInt64
2.浮点数
浮点数(Float32, Float64)
建议尽可能以整数形式存储数据。
对浮点数进行计算可能引起四舍五入的误差。
浮点计算结果可能是诸如正无穷大(inf)、负无穷大(-inf)和"非数字"(nan)。
3.有符号的浮点数
有符号的定点数(Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S))
4.变长字符串(String)
字符串可以任意长度的。它可以包含任意的字节,包含空字节。
5.定长字符串(FixedString(N))
固定长度 N 的字符串。N 必须是严格的正自然数。 当服务端读取长度小于 N 的字符串时候(例如解析 INSERT 数据时),通过在字符串末尾添加空字节来达到 N 字节长度。 当服务端读取长度大于 N 的字符串时候,将返回错误消息。 当服务器写入一个字符串(例如,当输出 SELECT 查询的结果)时,NULL字节不会从字符串的末尾被移除,而是被输出。
6.布尔值
没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。
7.通用唯一标识符(UUID)
通用唯一标识符(UUID)是用于标识记录的16字节数字。
如果在插入新记录时未指定UUID列值,则UUID值将填充为零:00000000-0000-0000-0000-000000000000
要生成UUID值,ClickHouse提供generateUUIDv4()函数。
UUID数据类型不支持算术运算(例如,abs)或聚合函数(例如sum和avg)。
UUID数据类型仅支持String数据类型也支持的函数(例如,min,max和count)
8.日期(Date)
日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。
最小值输出为0000-00-00。
9.时间戳(DateTime)
时间戳类型。用四个字节(无符号的)存储 Unix 时间戳)。允许存储与日期类型相同的范围内的值。最小值为 0000-00-00 00:00:00。时间戳类型值精确到秒。
DateTime、DateTime64 和 Date
Date: 2020-02-02 精确到天
DateTime: 2020-02-02 20:20:20 精确到秒
DateTime64: 2020-02-02 20:20:20.335 精确到亚秒,可以设置精度
均支持字符串写入
clickhouse 的时间类型没有时间戳类型, 最高精度是 秒 所以如果需要处理毫秒、微秒精度的时间,则只能借助UInt类型实现。
10.枚举类型(Enum8, Enum16)
Enum 保存 ‘string’= integer 的对应关系。在 ClickHouse 中,尽管用户使用的是字符串常量,但所有含有 Enum 数据类型的操作都是按照包含整数的值来执行。这在性能方面比使用 String 数据类型更有效。
Enum8 用 ‘String’= Int8 对描述。
Enum16 用 ‘String’= Int16 对描述。
CREATE TABLE t_enum
(
x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog
#
INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
这个 x 列只能存储类型定义中列出的值:‘hello’或’world’。如果您尝试保存任何其他值,ClickHouse 抛出异常。
SELECT array(1, 2)
SELECT [1, 2]
如果在元素中存在 NULL或存在 Nullable类型元素,那么数组的元素类型将会变成 Nullable。
如果 ClickHouse 无法确定数据类型,它将产生异常。
SELECT tuple(1,'a')
CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog
#
INSERT INTO t_null VALUES (1, NULL)
CREATE TABLE test.visits
(
CounterID UInt32,
StartDate Date,
Sign Int8,
IsNew UInt8,
VisitID UInt64,
UserID UInt64,
...
Goals Nested
(
ID UInt32,
Serial UInt32,
EventTime DateTime,
Price Int64,
OrderID String,
CurrencyID UInt32
),
...
) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign)
参考: https://clickhouse.tech/docs/zh/engines/database-engines/mysql/