clickhouse数据类型

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]   Float32,Float64 浮点数 Float32 - float Float64 - double 对浮点数进行计算可能引起四舍五入的误差   Decimal(P,S),Decimal32(S),Decimal64(S),Decimal128(S): 有符号的定点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入) P - 精度。有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。 S - 规模。有效范围:[0:P],决定数字的小数部分中包含的小数位数。 对于不同的 P 参数值 Decimal 表示,以下例子都是同义的: -P从[1:9]-对于Decimal32(S) -P从[10:18]-对于Decimal64(小号) -P从[19:38]-对于Decimal128(S)   十进制值范围 * Decimal32(S) - ( -1 * 10^(9 - S),1*10^(9-S) ) * Decimal64(S) - ( -1 * 10^(18 - S),1*10^(18-S) ) * Decimal128(S) - ( -1 * 10^(38 - S),1*10^(38-S) )   内部表示方式 数据采用与自身位宽相同的有符号整数存储。这个数在内存中实际范围会高于上述范围,从 String 转换到十进制数的时候会做对应的检查。 由于现代CPU不支持128位数字,因此 Decimal128 上的操作由软件模拟。所以 Decimal128 的运算速度明显慢于 Decimal32/Decimal64。 运算和结果类型 对Decimal的二进制运算导致更宽的结果类型(无论参数的顺序如何)。 * Decimal64(S1) <op> Decimal32(S2) -> Decimal64(S) * Decimal128(S1) <op> Decimal32(S2) -> Decimal128(S) * Decimal128(S1) <op> Decimal64(S2) -> Decimal128(S) 精度变化的规则: * 加法,减法:S = max(S1, S2)。 * 乘法:S = S1 + S2。 * 除法:S = S1。 对于 Decimal 和整数之间的类似操作,结果是与参数大小相同的十进制。 未定义Decimal和Float32/Float64之间的函数。要执行此类操作,您可以使用:toDecimal32、toDecimal64、toDecimal128 或 toFloat32,toFloat64,需要显式地转换其中一个参数。注意,结果将失去精度,类型转换是昂贵的操作。 Decimal上的一些函数返回结果为Float64(例如,var或stddev)。对于其中一些,中间计算发生在Decimal中。对于此类函数,尽管结果类型相同,但Float64和Decimal中相同数据的结果可能不同。   Boolean: 没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1   String: 字符串可以任意长度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他 DBMSs 中的 VARCHAR、BLOB、CLOB 等类型 ClickHouse 没有编码的概念。字符串可以是任意的字节集,按它们原本的方式进行存储和输出。 若需存储文本,建议使用 UTF-8 编码。至少,如果终端使用UTF-8(推荐),这样读写就不需要进行任何的转换了   Fixedstring: 固定长度 N 的字符串(N 必须是严格的正自然数)<column_name> FixedString(N) 当数据的长度恰好为N个字节时,FixedString类型是高效的。 在其他情况下,这可能会降低效率   UUID: 通用唯一标识符(UUID)是用于标识记录的16字节数 如果在插入新记录时未指定UUID列值,则UUID值将用零填充00000000-0000-0000-0000-000000000000 用法示例 clickhouse数据类型 限制 UUID数据类型仅支持以下功能 字符串 数据类型也支持(例如, min, max,和 计数). 算术运算不支持UUID数据类型(例如, abs)或聚合函数,例如 sum 和 avg   Date: 日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。允许存储从 Unix 纪元开始到编译阶段定义的上限阈值常量(目前上限是2106年,但最终完全支持的年份为2105)。最小值输出为1970-01-01   Datetime64: 允许存储时间instant间,可以表示为日历日期和一天中的时间,具有定义的亚秒精度。刻度尺寸(精度):10-精度 秒 语法:DateTime64(precision, [timezone]) 在内部,存储数据作为一些 ‘ticks’ 自纪元开始(1970-01-01 00:00:00UTC)作为Int64. 刻度分辨率由precision参数确定。 此外,该 DateTime64 类型可以存储时区是相同的整个列,影响如何的值 DateTime64 类型值以文本格式显示,以及如何解析指定为字符串的值 (‘2020-01-01 05:00:01.000’). 时区不存储在表的行中(或resultset中),而是存储在列元数据中 用法示例: clickhouse数据类型

 

 

Enum8,Enum16: Enum 保存 'string'= integer 的对应关系。在 ClickHouse 中,尽管用户使用的是字符串常量,但所有含有 Enum 数据类型的操作都是按照包含整数的值来执行。这在性能方面比使用 String 数据类型更有效。 Enum8 用 'String'= Int8 对描述。 Enum16 用 'String'= Int16 对描述。 用法示例 clickhouse数据类型

 

 

LowCardinality Data Type: 把其它数据类型转变为字典编码类型 LowCardinality(data_type) 参数:data_type — String, FixedString, Date, DateTime,包括数字类型,但是Decimal除外。对一些数据类型来说,LowCardinality 并不高效,详查allow_suspicious_low_cardinality_types设置描述   LowCardinality 是一种改变数据存储和数据处理方法的概念。 ClickHouse会把 LowCardinality 所在的列进行dictionary coding。对很多应用来说,处理字典编码的数据可以显著的增加SELECT查询速度。 使用 LowCarditality 数据类型的效率依赖于数据的多样性。如果一个字典包含少于10000个不同的值,那么ClickHouse可以进行更高效的数据存储和处理。反之如果字典多于10000,效率会表现的更差。 当使用字符类型的时候,可以考虑使用 LowCardinality 代替Enum。 LowCardinality 通常更加灵活和高效   用法示例: clickhouse数据类型

 

 

上一篇:toFixed的使用


下一篇:更强更方便的进制转换工具