Clickhouse线上环境用了半年多,简直堪称完美。每秒1W~5W点数据写入,当前超百亿级别数据规模,仍然可以支持到几十毫秒级别的数据查询。
今天又想把报警日志存入到Clickhouse数据表中,遂又过来熟悉下。
数据类型
Clickhouse数据类型分为基础类型、复合类型和特殊类型。
基础类型
数值类型
- Int:Int8/Int16/Int32/Int64/UInt8/UInt16/UInt32/UInt64/
- Float:Float32/Float64
- Decimal:Decimal32/Decimal64/Decimal/128
字符串类型
- String:
- FixedString:
- UUID:
时间类型
- DateTime:精确到秒
- DateTime64:精确到亚秒
- Date:精确到天
复合类型
- Array:数组,自动推断类型
- Tuple:元组,每个元素支持不同数据类型,且不要求兼容
- Enum:Enum8/Enum16 枚举类型
- Nested:嵌套类型,指表嵌套,类似于主表中存储detail信息;
特殊类型
- Nullable:可空修饰符
- Domain:IPV4/IPV6
类型使用思考?
1、UUID能不能充当表的主键?
通过查看MergeTree存储接口,可初步判断,UUID可以充当为每行的主键,且主键还允许重复。
CREATE TABLE iios_cloud.event_verify_data (
uuid UUID,
event_time DateTime,
verify_time DateTime,
company UUID,
module Enum8('IIOS-CONSOLE'=1,'IIOS-AUTH'=2,'IIOS-ENERGY'=3,'IIOS-GUARD'=4),
duration_sec UInt32
)
ENGINE = MergeTree
PRIMARY KEY (uuid)
PARTITION BY (company,module,
toYYYYMM(event_time))
ORDER BY (uuid)
CREATE TABLE iios_cloud.event_data (
uuid UUID,
module Enum8('IIOS-CONSOLE'=1,'IIOS-AUTH'=2,'IIOS-ENERGY'=3,'IIOS-GUARD'=4),
event_time DateTime,
message String,
value String,
threshold String,
level Enum8('LOW'=1,'MIDDLE'=2,'HIGH'=3,'URGENT'=4),
param String,
classify String,
company UUID,
factory_model_id String
)
ENGINE = MergeTree
PARTITION BY (company,module,
toYYYYMM(event_time))
ORDER BY (level,factory_model_id,
event_time)
ALTER TABLE iios_cloud.event_verify MODIFY COLUMN module Enum8('IIOS-CONSOLE'=1,'IIOS-AUTH'=2,'IIOS-ENERGY'=3,'IIOS-GUARD'=4,'IIOS-SPC'=5)
CREATE TABLE iios_cloud.event_buffer AS iios_cloud.event_data ENGINE = Buffer(iios_cloud, event_data, 16, 10, 100, 10000, 1000000, 10000000, 100000000)