• 【ClickHouse】0:clickhouse学习2之数据类型


    一 :如何查看clickhouse具体支持哪些数据类型?

    1:查看官方文档:https://clickhouse.tech/docs/en/sql-reference/data-types/

    2:查看系统表:select * from system.data_type_families;

    SELECT *
    FROM system.data_type_families
    
    ┌─name────────────────────────────┬─case_insensitive─┬─alias_to────┐
    │ Ring                            │                0 │             │
    │ Polygon                         │                0 │             │
    │ IPv6                            │                0 │             │
    │ IPv4                            │                0 │             │
    │ IntervalYear                    │                0 │             │
    │ IntervalQuarter                 │                0 │             │
    │ IntervalMonth                   │                0 │             │
    │ IntervalDay                     │                0 │             │
    │ IntervalHour                    │                0 │             │
    │ IntervalSecond                  │                0 │             │
    │ AggregateFunction               │                0 │             │
    │ Nothing                         │                0 │             │
    │ Tuple                           │                0 │             │
    │ Array                           │                0 │             │
    │ Nullable                        │                0 │             │
    │ Int32                           │                0 │             │
    │ Date                            │                1 │             │
    │ Enum                            │                0 │             │
    │ Enum8                           │                0 │             │
    │ IntervalMinute                  │                0 │             │
    │ FixedString                     │                0 │             │
    │ LowCardinality                  │                0 │             │
    │ String                          │                0 │             │
    │ DateTime                        │                1 │             │
    │ UUID                            │                0 │             │
    │ Decimal64                       │                1 │             │
    │ Decimal32                       │                1 │             │
    │ Point                           │                0 │             │
    │ Float64                         │                0 │             │
    │ Int16                           │                0 │             │
    │ DateTime64                      │                1 │             │
    │ Decimal128                      │                1 │             │
    │ Int8                            │                0 │             │
    │ SimpleAggregateFunction         │                0 │             │
    │ Nested                          │                0 │             │
    │ Int64                           │                0 │             │
    │ Decimal                         │                1 │             │
    │ IntervalWeek                    │                0 │             │
    │ UInt64                          │                0 │             │
    │ Enum16                          │                0 │             │
    │ UInt32                          │                0 │             │
    │ UInt16                          │                0 │             │
    │ Float32                         │                0 │             │
    │ MultiPolygon                    │                0 │             │
    │ UInt8                           │                0 │             │
    │ INET6                           │                1 │ IPv6        │
    │ INET4                           │                1 │ IPv4        │
    │ BINARY                          │                1 │ FixedString │
    │ NATIONAL CHAR VARYING           │                1 │ String      │
    │ BINARY VARYING                  │                1 │ String      │
    │ NCHAR LARGE OBJECT              │                1 │ String      │
    │ NATIONAL CHARACTER VARYING      │                1 │ String      │
    │ NATIONAL CHARACTER LARGE OBJECT │                1 │ String      │
    │ NATIONAL CHARACTER              │                1 │ String      │
    │ NATIONAL CHAR                   │                1 │ String      │
    │ CHARACTER VARYING               │                1 │ String      │
    │ CLOB                            │                1 │ String      │
    │ MEDIUMTEXT                      │                1 │ String      │
    │ NUMERIC                         │                1 │ Decimal     │
    │ TINYTEXT                        │                1 │ String      │
    │ TEXT                            │                1 │ String      │
    │ TINYBLOB                        │                1 │ String      │
    │ VARCHAR2                        │                1 │ String      │
    │ DOUBLE PRECISION                │                1 │ Float64     │
    │ CHARACTER LARGE OBJECT          │                1 │ String      │
    │ LONGTEXT                        │                1 │ String      │
    │ NVARCHAR                        │                1 │ String      │
    │ INT1 UNSIGNED                   │                1 │ UInt8       │
    │ VARCHAR                         │                1 │ String      │
    │ INT                             │                1 │ Int32       │
    │ SINGLE                          │                1 │ Float32     │
    │ BYTEA                           │                1 │ String      │
    │ CHAR VARYING                    │                1 │ String      │
    │ MEDIUMBLOB                      │                1 │ String      │
    │ NCHAR                           │                1 │ String      │
    │ CHAR                            │                1 │ String      │
    │ SMALLINT UNSIGNED               │                1 │ UInt16      │
    │ TIMESTAMP                       │                1 │ DateTime    │
    │ FIXED                           │                1 │ Decimal     │
    │ LONGBLOB                        │                1 │ String      │
    │ DEC                             │                1 │ Decimal     │
    │ TINYINT UNSIGNED                │                1 │ UInt8       │
    │ INTEGER UNSIGNED                │                1 │ UInt32      │
    │ INT UNSIGNED                    │                1 │ UInt32      │
    │ BLOB                            │                1 │ String      │
    │ REAL                            │                1 │ Float32     │
    │ BOOL                            │                1 │ Int8        │
    │ SMALLINT                        │                1 │ Int16       │
    │ INTEGER SIGNED                  │                1 │ Int32       │
    │ NCHAR VARYING                   │                1 │ String      │
    │ INT SIGNED                      │                1 │ Int32       │
    │ BIGINT SIGNED                   │                1 │ Int64       │
    │ BINARY LARGE OBJECT             │                1 │ String      │
    │ SMALLINT SIGNED                 │                1 │ Int16       │
    │ TINYINT SIGNED                  │                1 │ Int8        │
    │ INTEGER                         │                1 │ Int32       │
    │ INT1 SIGNED                     │                1 │ Int8        │
    │ BIGINT UNSIGNED                 │                1 │ UInt64      │
    │ FLOAT                           │                1 │ Float32     │
    │ BOOLEAN                         │                1 │ Int8        │
    │ DOUBLE                          │                1 │ Float64     │
    │ INT1                            │                1 │ Int8        │
    │ CHAR LARGE OBJECT               │                1 │ String      │
    │ TINYINT                         │                1 │ Int8        │
    │ BIGINT                          │                1 │ Int64       │
    │ CHARACTER                       │                1 │ String      │
    │ BYTE                            │                1 │ Int8        │
    └─────────────────────────────────┴──────────────────┴─────────────┘
    
    107 rows in set. Elapsed: 0.003 sec. 
    View Code

    二:clickhouse支持的常见的数据类型

    2.1:int: 整型

    Int Ranges (有符号的整型)

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

    Uint Ranges (无符号的整型)

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

    2.2:float: 浮点数

    • Float32 - float
    • Float64 - double

    建议尽可能以整数形式存储数据。
    对浮点数进行计算可能引起四舍五入的误差。
    浮点计算结果可能是诸如正无穷大(inf)、负无穷大(-inf)和"非数字"(nan)。

    SELECT 1 - 0.9 # 0.09999999999999998
    SELECT 0.5 / 0 # inf
    SELECT -0.5 / 0 # -inf
    SELECT 0 / 0 # nan
    

      

    2.3:Decimal(P,S): 有符号的定点数

    (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) )

    例如,Decimal32(4) 可以表示 -99999.9999 至 99999.9999 的数值,步长为0.0001。

    2.3:布尔值

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

    2.4:String:变长字符串

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

    2.4:FixedString(N):变长字符串

    固定长度 N 的字符串。N 必须是严格的正自然数。

    当数据的长度恰好为N个字节时,FixedString类型是高效的。 在其他情况下,这可能会降低效率。

    当向ClickHouse中插入数据时,

    • 如果字符串包含的字节数少于`N’,将对字符串末尾进行空字节填充。
    • 如果字符串包含的字节数大于N,将抛出Too large value for FixedString(N)异常。

    当做数据查询时,ClickHouse不会删除字符串末尾的空字节。 如果使用WHERE子句,则须要手动添加空字节以匹配FixedString的值。

    以下示例阐明了如何将WHERE子句与FixedString一起使用。

    考虑带有FixedString(2)列的表:

    ┌─name──┐
    │ b     │
    └───────┘
    

      

    查询语句SELECT * FROM FixedStringTable WHERE a = 'b' 不会返回任何结果。请使用空字节来填充筛选条件。

    SELECT * FROM FixedStringTable
    WHERE a = 'b'
    ┌─a─┐
    │ b │
    └───┘
    

      

    这种方式与MySQL的CHAR类型的方式不同(MySQL中使用空格填充字符串,并在输出时删除空格)。

    请注意,FixedString(N)的长度是个常量。仅由空字符组成的字符串,函数length返回值为N,而函数empty的返回值为1

    2.5:UUID:通用唯一标识符

    通用唯一标识符(UUID)是用于标识记录的16字节数字。
    如果在插入新记录时未指定UUID列值,则UUID值将填充为零:00000000-0000-0000-0000-000000000000
    要生成UUID值,ClickHouse提供generateUUIDv4()函数。

    select generateUUIDv4() # 29fc209d-eba3-4adf-b7cb-d4600036d10a

    UUID数据类型不支持算术运算(例如,abs)或聚合函数(例如sum和avg)。
    UUID数据类型仅支持String数据类型也支持的函数(例如,min,max和count)。

    2.6:Date:日期

    日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。

    允许存储从 Unix 纪元开始到编译阶段定义的上限阈值常量(目前上限是2106年,但最终完全支持的年份为2105)。最小值输出为1970-01-01。

    日期中没有存储时区信息。

    2.7:Datetime:时间戳

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

    时区:

    使用启动客户端或服务器时的系统时区,时间戳是从文本(分解为组件)转换为二进制并返回。在文本格式中,有关夏令时的信息会丢失。

    默认情况下,客户端连接到服务的时候会使用服务端时区。您可以通过启用客户端命令行选项 --use_client_time_zone 来设置使用客户端时间。

    因此,在处理文本日期时(例如,在保存文本转储时),请记住在夏令时更改期间可能存在歧义,如果时区发生更改,则可能存在匹配数据的问题。

    2.8:Enum:枚举

    枚举类型(Enum8, Enum16)

    Enum 保存 'string'= integer 的对应关系。

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

    CREATE TABLE t_enum
    (
        x Enum('hello' = 1, 'world' = 2)
    )
    ENGINE = TinyLog
    
    
    INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')

    这个 x 列只能存储类型定义中列出的值:'hello'或'world'。如果您尝试保存任何其他值,ClickHouse 抛出异常。

    2.9:Nullable:可为空/缺失值

    允许用特殊标记 (NULL) 表示«缺失值»,可以与 TypeName 的正常值存放一起。例如,Nullable(Int8) 类型的列可以存储 Int8 类型值,而没有值的行将存储 NULL

    对于 TypeName,不能使用复合数据类型 阵列 和 元组。复合数据类型可以包含 Nullable 类型值,例如Array(Nullable(Int8))

    Nullable 类型字段不能包含在表索引中。

    除非在 ClickHouse 服务器配置中另有说明,否则 NULL 是任何 Nullable 类型的默认值。

    要在表的列中存储 Nullable 类型值,ClickHouse 除了使用带有值的普通文件外,还使用带有 NULL 掩码的单独文件。 掩码文件中的条目允许 ClickHouse 区分每个表行的 NULL 和相应数据类型的默认值。 由于附加了新文件,Nullable 列与类似的普通文件相比消耗额外的存储空间。所以使用 Nullable 几乎总是对性能产生负面影响,在设计数据库时请记住这一点!

    2.10:Array(T):数组

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

    SELECT array(1, 2)
    SELECT [1, 2]
    

    如果在元素中存在 NULL或存在 Nullable类型元素,那么数组的元素类型将会变成 Nullable。
    如果 ClickHouse 无法确定数据类型,它将产生异常。

    2.11:Tuple(T1,T2,...):元组

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

    SELECT tuple(1,'a')
    

    2.12:Nested(Name1 Type1, Name2 Type2, ...):嵌套

    嵌套数据结构类似于嵌套表。嵌套数据结构的参数(列名和类型)与 CREATE 查询类似。每个表可以包含任意多行嵌套数据结构。
    只支持一级嵌套。嵌套结构的列中,若列的类型是数组类型,那么该列其实和多维数组是相同的,所以目前嵌套层级的支持很局限(MergeTree 引擎中不支持存储这样的列)
    大多数情况下,处理嵌套数据结构时,会指定一个单独的列。为了这样实现,列的名称会与点号连接起来。这些列构成了一组匹配类型。在同一条嵌套数据中,所有的列都具有相同的长度。
    不能对整个嵌套数据结构执行 SELECT。只能明确列出属于它一部分列。

    CREATE TABLE test.visits
    (
        CounterID UInt32,
        StartDate Date,
        Sign Int8,
        IsNew UInt8,
        VisitID UInt64,
        UserID UInt64,
        ...
        Goals Nested
        (
            ID UInt32,
            Serial UInt32,
            EventTime DateTime,
            Price Int64,
            OrderID String,
            CurrencyID UInt32
        ),
        ...
    ) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign)
    


  • 相关阅读:
    MVC ActionResult JsonResult
    xml文件
    使用socket实现聊天功能
    使用多线程完成Socket
    Socket编程
    U1总结
    多线程
    IO
    单例模式
    日期
  • 原文地址:https://www.cnblogs.com/DBArtist/p/clickhouse_datatypes.html
Copyright © 2020-2023  润新知