• 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 通常更加灵活和高效
     
    用法示例:
    博客链接:https://www.cnblogs.com/gqymy/
  • 相关阅读:
    Domain Space
    Class WriteGroupAttribute
    HelloCube:IJobForEach
    HelloCube:ForEach
    组件
    世界
    DOTS默认情况下的性能
    ECS适合你吗?
    DOTS原则和愿景
    Packages window(包窗口)
  • 原文地址:https://www.cnblogs.com/gqymy/p/14597417.html
Copyright © 2020-2023  润新知