共计 4517 个字符,预计需要花费 12 分钟才能阅读完成。
本文是 clickhouse 专栏第五篇,更多内容请关注本号历史文章!
一、数据类型表
clickhouse 内置了很多的 column 数据类型,能够通过查问 system.data_type_families
这张表获取版本的所有反对的数据类型。下文中第一列是字段类型,第二列示意该类型的字段类型是否辨别大小写(1 示意不辨别大小写,Date 和 date 都是无效的数据类型名称),第三类是该字段类型的别名。
peer1 :) SELECT * FROM system.data_type_families;
┌─name────────────────────────────┬─case_insensitive─┬─alias_to────┐
│ Polygon │ 0 │ │
│ Ring │ 0 │ │
│ Point │ 0 │ │
│ MultiPolygon │ 0 │ │
│ IPv6 │ 0 │ │
│ IntervalSecond │ 0 │ │
│ IPv4 │ 0 │ │
│ UInt32 │ 0 │ │
│ IntervalYear │ 0 │ │
│ IntervalQuarter │ 0 │ │
│ IntervalMonth │ 0 │ │
│ Int64 │ 0 │ │
│ IntervalDay │ 0 │ │
│ IntervalHour │ 0 │ │
│ UInt256 │ 0 │ │
│ Int16 │ 0 │ │
│ LowCardinality │ 0 │ │
│ AggregateFunction │ 0 │ │
│ Nothing │ 0 │ │
│ Decimal256 │ 1 │ │
│ Tuple │ 0 │ │
│ Array │ 0 │ │
│ Enum16 │ 0 │ │
│ IntervalMinute │ 0 │ │
│ FixedString │ 0 │ │
│ String │ 0 │ │
│ DateTime │ 1 │ │
│ Map │ 0 │ │
│ UUID │ 0 │ │
│ Decimal64 │ 1 │ │
│ Nullable │ 0 │ │
│ Enum │ 0 │ │
│ Int32 │ 0 │ │
│ UInt8 │ 0 │ │
│ Date │ 1 │ │
│ Decimal32 │ 1 │ │
│ UInt128 │ 0 │ │
│ Float64 │ 0 │ │
│ SimpleAggregateFunction │ 0 │ │
│ Nested │ 0 │ │
│ DateTime64 │ 1 │ │
│ Int128 │ 0 │ │
│ Decimal128 │ 1 │ │
│ Int8 │ 0 │ │
│ Decimal │ 1 │ │
│ Int256 │ 0 │ │
│ IntervalWeek │ 0 │ │
│ UInt64 │ 0 │ │
│ Enum8 │ 0 │ │
│ DateTime32 │ 1 │ │
│ UInt16 │ 0 │ │
│ Float32 │ 0 │ │
│ INET6 │ 1 │ IPv6 │
│ INET4 │ 1 │ IPv4 │
│ BINARY │ 1 │ FixedString │
│ NATIONAL CHAR VARYING │ 1 │ String │
│ BINARY VARYING │ 1 │ String │
│ NCHAR LARGE OBJECT │ 1 │ String │
│ NATIONAL CHARACTER VARYING │ 1 │ String │
│ NATIONAL CHARACTER LARGE OBJECT │ 1 │ String │
│ NATIONAL CHARACTER │ 1 │ String │
│ NATIONAL CHAR │ 1 │ String │
│ CHARACTER VARYING │ 1 │ String │
│ LONGBLOB │ 1 │ String │
│ MEDIUMTEXT │ 1 │ String │
│ TEXT │ 1 │ String │
│ TINYBLOB │ 1 │ String │
│ VARCHAR2 │ 1 │ String │
│ CHARACTER LARGE OBJECT │ 1 │ String │
│ DOUBLE PRECISION │ 1 │ Float64 │
│ LONGTEXT │ 1 │ String │
│ NVARCHAR │ 1 │ String │
│ INT1 UNSIGNED │ 1 │ UInt8 │
│ VARCHAR │ 1 │ String │
│ CHAR VARYING │ 1 │ String │
│ MEDIUMBLOB │ 1 │ String │
│ NCHAR │ 1 │ String │
│ CHAR │ 1 │ String │
│ SMALLINT UNSIGNED │ 1 │ UInt16 │
│ TIMESTAMP │ 1 │ DateTime │
│ FIXED │ 1 │ Decimal │
│ TINYTEXT │ 1 │ String │
│ NUMERIC │ 1 │ Decimal │
│ DEC │ 1 │ Decimal │
│ TINYINT UNSIGNED │ 1 │ UInt8 │
│ INTEGER UNSIGNED │ 1 │ UInt32 │
│ INT UNSIGNED │ 1 │ UInt32 │
│ CLOB │ 1 │ String │
│ MEDIUMINT UNSIGNED │ 1 │ UInt32 │
│ BOOL │ 1 │ Int8 │
│ SMALLINT │ 1 │ Int16 │
│ INTEGER SIGNED │ 1 │ Int32 │
│ NCHAR VARYING │ 1 │ String │
│ INT SIGNED │ 1 │ Int32 │
│ TINYINT SIGNED │ 1 │ Int8 │
│ BIGINT SIGNED │ 1 │ Int64 │
│ BINARY LARGE OBJECT │ 1 │ String │
│ SMALLINT SIGNED │ 1 │ Int16 │
│ MEDIUMINT │ 1 │ Int32 │
│ INTEGER │ 1 │ Int32 │
│ INT1 SIGNED │ 1 │ Int8 │
│ BIGINT UNSIGNED │ 1 │ UInt64 │
│ BYTEA │ 1 │ String │
│ INT │ 1 │ Int32 │
│ SINGLE │ 1 │ Float32 │
│ FLOAT │ 1 │ Float32 │
│ MEDIUMINT SIGNED │ 1 │ Int32 │
│ BOOLEAN │ 1 │ Int8 │
│ DOUBLE │ 1 │ Float64 │
│ INT1 │ 1 │ Int8 │
│ CHAR LARGE OBJECT │ 1 │ String │
│ TINYINT │ 1 │ Int8 │
│ BIGINT │ 1 │ Int64 │
│ CHARACTER │ 1 │ String │
│ BYTE │ 1 │ Int8 │
│ BLOB │ 1 │ String │
│ REAL │ 1 │ Float32 │
└─────────────────────────────────┴──────────────────┴─────────────┘
二、根底数据类型
clickhouse 和传统的数据库一样,提供了根底的数据类型,这一部分就简略的介绍一下,置信学过编程语言的同学对这一部分并不生疏。
整数类型
整数类型,IntN 随着 N 的增大,整型数值的范畴扩充。U 示意 unsigned 无符号,无符号就是没有正数符号,只能存储大于等于 0 的树。
- 有符号整型(IntN):Int8、Int16、Int32、Int64、Int128、Int256。数值范畴是【-2^(N-1) ~ 2^(N-1)-1】,比方:Int8(-128 到 127)
- 无符号整型(UIntN):UInt8、UInt16、UInt32、UInt64、UInt128、UInt256。数值范畴是【0 ~ 2^N-1】,比方:UInt8(0 到 255)
浮点类型
- 单精度浮点数 Float32,学过 C、java、mysql 的敌人把它当作 float 数据类型应用即可。从小数点后第 8 位起会产生精度失落。
- 双精度浮点数 Float64,学过 C、java、mysql 的敌人把它当作 double 数据类型应用即可。从小数点后第 17 位起会产生精度失落。
Decimal 类型
有的时候 Float32、Float64 无奈满足计算精度的要求,咱们就须要应用 Decimal 数据类型。ClickHouse 提供了 Decimal32、Decimal64 和 Decimal128 三种精度的 Decimal。
在定义表字段的类型时,能够通过两种模式申明:简写形式有 Decimal32(S)、Decimal64(S)、Decimal128(S) 三种,原生形式为 Decimal(P, S),示意该定点数的整数位加上小数位的总长度最大为 P,其中小数位长度最多为 S。
参考上面的 SQL 及输入后果进行了解和学习
SELECT
toDecimal64(2, 3) AS x, -- 数值为 2,精度为 3,所以 2.000
toTypeName(x) AS xtype,
toDecimal32(2, 2) AS y, -- 数值为 2,精度为 2,所以 2.00
toTypeName(y) as ytype,
x + y AS a, --2.000 + 2.00, 加减法取最大精度。所以 4.000
toTypeName(a) AS atype,
x * y AS b, --2.000*2.00, 乘法的精度值相加(2+3=5)。所以 4.00000
toTypeName(b) AS btype,
x / y AS c, --2.000/2.00,被除数 2.000 精度是 3,后果精度等于被除数精度。所以 1.000
toTypeName(c) AS ctype;
下图为下面的 SQL 的执行后果
一般 String 类型
clickhouse 中的 String 类型并没有长度限度,所以它能够代替传统关系型数据库中的所有以字符模式存在的数据类型,如:CHAR、VARCHAR、CLOB 等等。
FixedString 类型
FixedString(N)示意固定长度为 N 的数据类型,能够应用 toFixedString 函数将 String 转换成 FixedString。下文中的 SQL 尽管 zimug
长度是 5,但应用 FixedString(6)长度为 6,理论存储内容是zimug\0
。
peer1 :) select toFixedString('zimug', 6), length(toFixedString('zimug', 6));
┌─toFixedString('zimug', 6)─┬─length(toFixedString('zimug', 6))─┐
│ zimug │ 6 │
└───────────────────────────┴───────────────────────────────────┘
UUID
UUID 是比拟常见的数据惟一值,ClickHouse 把它作为一种数据类型。UUID 数据格式如:6fb875ae-75b9-4643-a146-5a1de7c717b4
, 应用形式如下:
应用示例如下:
-- 建表时创立 UUID 数据类型字段
CREATE TABLE test_uuid (id UUID, content String) ENGINE=TinyLog;
-- 向表中插入数据
INSERT INTO test_uuid SELECT generateUUIDv4(), 'test uuid 1';
-- 插入的时候不为 UUID 赋值,UUID 字段应用 0 填充
INSERT INTO test_uuid (content) VALUES ('test uuid 2');
日期类型
日期数据类型有三种:DateTime、DateTime64 和 Date,并且反对应用字符串的形式 insert 写入日期格局。另外还有一种日期类型 TIMESTAMP,其应用办法和 DateTime 类型一摸一样,只是对 DateTime 数据类型起了一个别名。
- DateTime 准确到秒,如:’2022-06-12 06:06:06′
- DateTime64 准确到亚秒,如:’2022-06-12 06:06:06.000′
- Date 不蕴含工夫信息,准确到天,如:’2022-06-12′
布尔类型
ClickHouse 布尔数据类型 BOOLEAN。其理论存储就是应用 UInt8 类型,取值限度为 0 或 1。
举荐浏览
《clickhouse 专栏》