我是靠谱客的博主 丰富身影,最近开发中收集的这篇文章主要介绍clickhouse---数据定义Clickhouse — 数据定义,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Clickhouse — 数据定义

文章目录

  • Clickhouse --- 数据定义
    • 1. 简介
    • 2. 数据定义
      • 2.1 基础类型
      • 2.2 复合类型
      • 2.3 特殊类型

1. 简介

Clickhouse 是一款服务于Yandex.Metrica的产品。Metrica 是一款用于web流量分析工具,对采集的数据进行数据分析(OLAP的分析)。因此,ClickHouse是一款OLAP数据库。

这里主要介绍其数据定义的几种方式。

2. 数据定义

作为一款完整的数据库管理系统(DBMS),Clickhouse拥有完整的DDL与DML功能。在支持大量的SQL的条件下,Clickhouse作为一款高性能OLAP数据库,不能用传统SQL数据库来度量。

对于数据的定义方式Clickhouse分为:基础类型、复合类型和特殊类型。

2.1 基础类型

  1. 数值类型

    1. Int

    首当其冲的当然是必不可少的Int类型。相比于传统的smallint、int、BigiInt,Clickhouse定义Int的方式更加易懂。具体如下表所示

    名称范围字节大小
    Int8-128~1271
    Int16-327678~327672
    Int32-2147483648~21474836474
    Int64-2^63 ~ 2^63-18

    同时也支持无符号Int类型

    名称范围字节大小
    UInt80 ~ 2^8 - 11
    UInt160 ~ 2^16 - 12
    UInt320 ~ 2^32 - 14
    UInt640 ~ 2^64-18
    1. Float
    名称大小有效精度
    Float3247
    Float62816

    Clickhouse 还支持无穷大的表达方式:inf,-inf,nan

    3)Decimal

    对于的更高精度的数值运算,还提供了定点数。

    Decimal(P,S)

    • P 代表精度,决定总位数
    • S 代表规模,决定小数位大小
  2. 字符串类型

    1. String类型

    长度不限制

    1. FixedString

    通过FixedString(N)来指定大大小。

    1. UUID

    一共有32位,格式为8-4-4-4-12

  3. 时间类型

    CREATE TABLE Datatime_Test (
    	c1 DateTime,
      c2 DateTime(2),
      c3 Date
    ) ENGINE = Memory
    
    1. DateTime

    DateTime 包含时、分、秒信息,精确到秒。

    INSERT INTO Datatime_TEST VALUES('2021-06-20 00:00:00')
    
    1. DateTime64

    这个跟上面的DateTime的区别为:可以记录亚秒,精度更高。

    INSERT INTO Datatime_TEST VALUES('2021-06-20 00:00:00')
    
    SELECT toTypeName(c2) FROM Datatime_TEST
    
    # Output: 2020-06-20 00:00:00.00
    
    1. Date

    这个精确度最低,只能精确到日期

    INSERT INTO Datatime_TEST VALUES('2021-06-20')
    

2.2 复合类型

除了基本数据类型以外,还有数组、元组、枚举、嵌套四类复合类型。

注意:这些类型是其他数据库所不具备的

  1. Array

    SELECT array(1,2) as a
    
    或者
    
    SELECT [1,2]
    

    一个数组可以包含多种数据类型,但是数据类型之间必须兼容。比如:[1,2.0]

  2. Tuple

    元组类型由1~n个元素组成,每个元素可以设置不同的数据类型,但是类型之间不要求兼容

    CREATE TABLE Tuple_TEST (
    	t1 Tuple(String, Int8)
    )ENGINE = memory
    
    INSERT INTO Tuple_TEST VALUES(('abc',123));
    
  3. Enum

    固定使用(String)Key:Value的形式

    CREATE TABLE Enum_TEST (
    	t1 Enum8('ready' = 1, 'start' = 2, 'success' = 3)
    )ENGINE = memory
    
    INSERT INTO Enum_TEST VALUES('stop');
    
  4. Nested

    对于嵌套表结构来说,可以存放多个数据类型,但是嵌套表内不能在进行套娃

    CREATE TABLE nested_TEST (
    	name String,
      age Uint8,
      dept Nested(
      	id Uint8,
        name String
      )
    )ENGINE = memory
    
    INSERT INTO nested_TEST VALUES ('nauu', 18, [1000,2000], ['研发中心','Research'])
    

2.3 特殊类型

  1. Nullable

    类似于JAVA的Optional

  2. Domain

    域名类型分为IPV4IPV6

    问题来了:为什么要用这么复杂的结构,String直接搞定不就行了嘛?

    这边主要两个理由:

    1. IPV4支持格式合法性检测,使得瞎写的IP无法进入

    2. 性能更加高,IPV4使用UInt32存储,相比String更加紧实。

    IPV6使用FixString(16)封装。

    INSERT INTO IP4_TEST VALUES('www.nuaa.com','192.0.0') # error
    INSERT INTO IP_TEST VALUES('www.nuaa.com','192.0.0.1')
    

最后

以上就是丰富身影为你收集整理的clickhouse---数据定义Clickhouse — 数据定义的全部内容,希望文章能够帮你解决clickhouse---数据定义Clickhouse — 数据定义所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部