别名:
Int8 — TINYINT, BOOL, BOOLEAN, INT1.
Int16 — SMALLINT, INT2.
Int32 — INT, INT4, INTEGER.
Int64 — BIGINT.
UInt 无符号整形
UInt8 — [0 : 255]
UInt16 — [0 : 65535]
UInt32 — [0 : 4294967295]
UInt64 — [0 : 18446744073709551615]
UInt128 — [0 : 340282366920938463463374607431768211455]
UInt256 — [0 : 115792089237316195423570985008687907853269984665640564039457584007913129639935]
Float 浮点型(不推荐使用)
尽可能以整数形式存储数据。
Float32 – float
Float64 – double
Boolean 布尔型
没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。
Decimal 型
有符号的浮点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会
被丢弃(不舍入)。
有三种声明:
➢ Decimal32(s),相当于 Decimal(9-s,s),有效位数为 1~9
➢ Decimal64(s),相当于 Decimal(18-s,s),有效位数为 1~18
➢ Decimal128(s),相当于 Decimal(38-s,s),有效位数为 1~38
s 标识小数位
使用场景: 一般金额字段、汇率、利率等字段为了保证小数点精度,都使用 Decimal
进行存储。
String 字符串
1)String
字符串可以任意长度的。它可以包含任意的字节集,包含空字节。
2)FixedString(N)
固定长度 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符
串时候,通过在字符串末尾添加空字节来达到 N 字节长度。 当服务端读取长度大于 N 的
字符串时候,将返回错误消息。
与 String 相比,极少会使用 FixedString,因为使用起来不是很方便。
使用场景:名称、文字描述、字符型编码。 固定长度的可以保存一些定长的内容,比
如一些编码,性别等但是考虑到一定的变化风险,带来收益不够明显,所以定长字符串使用
意义有限。
UUID
通用唯一标识符(UUID)是一个16字节的数字,用于标识记录
UUID类型值的示例如下:
61f0c404-5cb3-11e7-907b-a6006ad3dba0
如果在插入新记录时未指定UUID列的值,则UUID值将用零填充:
00000000-0000-0000-0000-000000000000
时间类型
目前 ClickHouse 有四种时间类型
1.Date “2019-12-16”, 以两字节存储, 支持范围[1970-01-01-2148-01-01]
2.Date32 “2019-12-16”, 以四字节存储, 支持范围[1970-01-01 00:00:00, 2283-11-11 23:59:59]
3.Datetime “2019-12-16 20:50:10”, 支持范围[1970-01-01 00:00:00, 2105-12-31 23:59:59]
4.Datetime64 “2019-12-16 20:50:10.666”, 以Int64存储, 支持范围[1970-01-01 00:00:00, 2283-11-11 23:59:59]
其中Datetime是最常用的
枚举类型
包括
Enum8 和 Enum16 类型。Enum 保存 ‘string’= integer 的对应关系。
Enum8 用 ‘String’= Int8 对描述。
Enum16 用 ‘String’= Int16 对描述。
举例说明:
CREATE TABLE t_enum
(
x Enum8(‘hello’ = 1, ‘world’ = 2)
)
ENGINE = TinyLog;
如果新增枚举类型, 还需要对表进行ALTER操作, 增加维护成本, 不推荐使用
LowCardinality 低基数类型
CREATE TABLE lc_t
(
`id` UInt16,
`strings` LowCardinality(String)
)
ENGINE = MergeTree()
ORDER BY id
LowCardinality(data_type)
data_type可用类型: String, FixedString, Date, DateTime, and numbers excepting Decimal
1.LowCardinality是改变数据存储方法和数据处理规则的上层结构。ClickHouse将字典编码应用于LowCardinality-columns。使用字典编码的数据操作可以显著提高许多应用程序的SELECT查询性能。
2.使用LowCardinality数据类型的效率取决于数据多样性。如果一个字典包含的不同值少于10,000个,那么ClickHouse通常表现出更高的数据读取和存储效率。如果一个字典包含超过100,000个不同的值,那么ClickHouse在compariso中的表现会更差
3.在处理字符串时,考虑使用LowCardinality而不是Enum。LowCardinality在使用中提供了更多的灵活性,通常显示相同或更高的效率。
数组array(T)
T类型项的数组。T可以是任何数据类型,包括数组。
但不推荐使用多维数组,ClickHouse 对多维数组的支持有限
SELECT array(1, 2) AS x, toTypeName(x)
┌─x─────┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8) │
└───────┴─────────────────────────┘
Nested 嵌套类型
类似于mongodb, 层级太深, 不确定数据聚合时会有什么影响, 暂时不用
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)
GEO类型
只保存一个坐标
SET allow_experimental_geo_types = 1;
CREATE TABLE geo_point (p Point) ENGINE = Memory();
INSERT INTO geo_point VALUES((10, 10));
SELECT p, toTypeName(p) FROM geo_point;
┌─p─────┬─toTypeName(p)─┐
│ (10,10) │ Point │
└───────┴───────────────┘
保存多个坐标
SET allow_experimental_geo_types = 1;
CREATE TABLE geo_ring (r Ring) ENGINE = Memory();
INSERT INTO geo_ring VALUES([(0, 0), (10, 0), (10, 10), (0, 10)]);
SELECT r, toTypeName(r) FROM geo_ring;
┌─r─────────────────────────────┬─toTypeName(r)─┐
│ [(0,0),(10,0),(10,10),(0,10)] │ Ring │
└───────────────────────────────┴───────────────┘
AggregateFunction 聚合方法类型
依赖表引擎, AggregatingMergeTree部分
传送门
https://blog.csdn.net/xushijie89/article/details/123049740
其他字段类型参考官网
https://clickhouse.com/docs/en/sql-reference/data-types/