• clickhouse基本数据类型总结


    个人学习笔记,谢绝转载!!!
    原文:https://www.cnblogs.com/wshenjin/p/13072989.html


    整型

    有符号整型(-2n-1~2n-1-1):

    • Int8 - [-128 : 127]
    • Int16 - [-32768 : 32767]
    • Int32 - [-2147483648 : 2147483647]
    • Int64 - [-9223372036854775808 : 9223372036854775807]

    无符号整型范围(0~2n-1):

    • UInt8 - [0 : 255]
    • UInt16 - [0 : 65535]
    • UInt32 - [0 : 4294967295]
    • UInt64 - [0 : 18446744073709551615]

    浮点型

    • Float32 - float
    • Float64 – double

    布尔型

    没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。

    字符串

    • 变长字符串 String
      字符串可以任意长度的。它可以包含任意的字节集,包含空字节。

    • 定长字符串 FixedString(N)
      固定长度 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符串时候,通过在字符串末尾添加空字节来达到 N 字节长度。 当服务端读取长度大于 N 的字符串时候,将返回错误消息。
      与String相比,极少会使用FixedString,因为使用起来不是很方便。

    枚举类型

    • Enum8 用 'String'= Int8 对描述。
    • Enum16 用 'String'= Int16 对描述。

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

    #新建一张带Enum8类型的表:
    localhost :) CREATE TABLE  enum_t (  et Enum8('a' = 1, 'b' = 2, 'c' =3)) ENGINE = TinyLog;
    localhost :) DESC enum_t ;
    ┌─name─┬─type─────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
    │ et   │ Enum8('a' = 1, 'b' = 2, 'c' = 3) │              │                    │         │                  │                │
    └──────┴──────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
    
    #插入数据
    localhost :) INSERT INTO enum_t(et) VALUES ('a'),('a'),('b');
    
    #查看
    localhost :) SELECT * FROM enum_t ;
    ┌─et─┐
    │ a  │
    │ a  │
    │ b  │
    └────┘
    
    #如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型:
    localhost :) SELECT CAST(et, 'Int8') FROM enum_t ;
    ┌─CAST(et, 'Int8')─┐
    │                1 │
    │                1 │
    │                2 │
    └──────────────────┘
    

    数据组

    • Array(T)

    由 T 类型元素组成的数组。T 可以是任意类型,包含数组类型,但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。
    可以使用array()函数和中括号来创建数组

    举例:

    #新建两张带Array类型的表:
    localhost :) CREATE TABLE array_t (arr Array(UInt8)) ENGINE = TinyLog;
    localhost :) CREATE TABLE array_ta (arr Array(String)) ENGINE = TinyLog;
    
    #插入数组
    localhost :) INSERT INTO array_t VALUES([1,2,3,4,5]),(array(11,22,33,44,55));
    localhost :) INSERT INTO array_ta VALUES(['a','b','c']),(array('x','y','z','123'));
    
    #查看结果
    localhost :) SELECT * FROM array_t ;
    ┌─arr──────────────┐
    │ [1,2,3,4,5]      │
    │ [11,22,33,44,55] │
    └──────────────────┘
    
    localhost :) SELECT * FROM array_ta;
    ┌─arr─────────────────┐
    │ ['a','b','c']       │
    │ ['x','y','z','123'] │
    └─────────────────────┘
    
    

    元组

    • Tuple(T1, T2, ...)

    元组,其中每个元素都有单独的类型。

    举个例子:

    #创建一张带tuple字段的表:
    localhost :) CREATE TABLE tuple_t (ttt Tuple(Int8, String, Array(String), Array(Int8))) ENGINE = TinyLog;
    
    #插入数据
    localhost :) INSERT INTO tuple_t VALUES((1, 'a', ['a', 'b', 'c'], [1, 2, 3])),(tuple(11, 'A', ['A', 'B', 'C'], [11, 22, 33]));
    
    #查看数据
    localhost :) SELECT * FROM tuple_t ;
    ┌─ttt───────────────────────────────┐
    │ (1,'a',['a','b','c'],[1,2,3])     │
    │ (11,'A',['A','B','C'],[11,22,33]) │
    └───────────────────────────────────┘
    

    日期

    • Date

    用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值, 最小值输出为0000-00-00。

    时间戳

    • DateTime

    用四个字节(无符号的)存储 Unix 时间戳,允许存储与日期类型相同的范围内的值。最小值为 0000-00-00 00:00:00,时间戳类型值精确到秒。

  • 相关阅读:
    CSS:关于CSS Hack
    JS数据交互:动态从数据库中获取数据填充Select
    Oracle数据库—— 事务处理与并发控制
    Java 实现任意N阶幻方的构造
    Java 实现奇数阶幻方的构造
    Web前端开发笔试&面试_03
    任意多边形的几何变换
    关于网站劫持
    mysql 出现Host 'localhost' is not allowed to connect to this MySQL server 错误
    mysql 导入表数据中文乱码
  • 原文地址:https://www.cnblogs.com/wshenjin/p/13072989.html
Copyright © 2020-2023  润新知