ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

clickhouse数据类型

2021-03-30 16:32:08  阅读:323  来源: 互联网

标签:10 存储 01 Decimal 数据类型 Decimal128 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 用法示例 限制 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中),而是存储在列元数据中 用法示例:

 

 

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

 

 

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 通常更加灵活和高效   用法示例:

 

 

标签:10,存储,01,Decimal,数据类型,Decimal128,clickhouse
来源: https://www.cnblogs.com/gqymy/p/14597417.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有