• ClickHouse学习笔记之数据类型


    背景

    安装好ClickHouse后,我们从其数据类型开始学习

    整型

    整型类型、是否有符号和取值范围如下表所示:
    在这里插入图片描述
    其中有符号整型取值范围为[-2^n-1, 2^(n-1)-1],无符号整型取值范围为[0, 2^(n-1)],n取值范围为{8, 16, 32 ,64}

    浮点型

    Float32和Float64

    布尔型

    无,可用整型表示

    精度保持浮点数

    有Decima32(n)、Decimal64(n)和Decimal128(n)三种类型,最大位数分别为9、18和38,其中n表示小数部分位数。
    比如用这三种类型表示123321.1234567,Decimal32(3)、Decimal64(3)和Decimal128(3)就都是123321.123。

    字符串

    可变长度字符串String和固定长度为N的字符串FixedString(N),前者长度任意,后者长度固定为N(可传入),不够则在末尾加入空字节,超出则报错。

    枚举类型

    有Enum8和Enum16两种类型,用以保存字符串和8位或16位有符号整数的的对应关系。
    比如创建一个a对应1,b对应2的表,其中x列存有枚举类型:

    scentos :) create table t_enum (x Enum8('a'=1, 'b'=2)) engine = TinyLog;
    
    • 1

    其中的x列只能存储枚举类型中列举的字符串:

    scentos :) insert into t_enum values ('a'), ('b'), ('b');
    
    • 1

    如果存其他没有枚举出来的字符串,就会抛出异常:

    scentos :) insert into t_enum values ('ac');
    
    INSERT INTO t_enum FORMAT Values
    
    Query id: f9fddc87-f21a-4c63-a6e8-2d0510e00961
    
    Exception on client:
    Code: 36. DB::Exception: Unknown element 'ac' for enum: While executing ValuesBlockInputFormat: data for INSERT was parsed from query. (BAD_ARGUMENTS)
    
    scentos :)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    如果要看到某个枚举列对应的数值,必须将其值转换成定义时对应的整数类型:

    scentos :) select cast(x, 'Int8') from t_enum;
    
    SELECT cast(x, 'Int8')
    FROM t_enum
    
    Query id: 4690987b-fe53-4e37-b437-4a57f8790377
    
    Connecting to database default at localhost:9000 as user default.
    Connected to ClickHouse server version 21.11.5 revision 54450.
    
    ┌─CAST(x, 'Int8')─┐
    │               1 │
    │               2 │
    │               2 │
    └─────────────────┘
    
    3 rows in set. Elapsed: 0.003 sec.
    
    scentos :)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    时间类型

    有三种时间类型,如下表所示:
    在这里插入图片描述

    数组类型

    Array(T):由类型T组成的数组,T可以是任何类型,包括数组类型,但不推荐存储多维数组。

    创建数组可以用array函数:

    scentos :) select array(1, -2) as x, toTypeName(x);
    
    SELECT
        [1, -2] AS x,
        toTypeName(x)
    
    Query id: 043c2e1e-1b12-4c0d-bba9-9ab1513e2a73
    
    ┌─x──────┬─toTypeName(array(1, -2))─┐
    │ [1,-2] │ Array(Int16)             │
    └────────┴──────────────────────────┘
    
    1 rows in set. Elapsed: 0.003 sec.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    也可以用中括号:

    scentos :) select [1, 2] as x, toTypeName(x);
    
    SELECT
        [1, 2] AS x,
        toTypeName(x)
    
    Query id: 89c7dda8-d335-4af2-b6af-b8977dc6e686
    
    ┌─x─────┬─toTypeName([1, 2])─┐
    │ [1,2] │ Array(UInt8)       │
    └───────┴────────────────────┘
    
    1 rows in set. Elapsed: 0.001 sec.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    更多数据类型可参见官网文档

  • 相关阅读:
    M1 Pro MacBook Pro下载Android11源码
    测试用例千万不能随便,记录由一个测试用例异常引起的思考
    多文本键值关联
    教育在线学习系统,教育培训都能用,支持多个终端
    JavaScript - 移除数组中的空字符串元素
    django建站过程(5)添加导入导出功能
    【C语言】用单链表实现一个二进制数加1的运算。
    嵌入式实时操作系统的设计与开发(aCoral线程学习)
    LeetCode 318. 最大单词长度乘积
    C++ getline():从文件中读取一行字符串
  • 原文地址:https://blog.csdn.net/qq_37475168/article/details/126554488