首页 > 其他分享 >4.ClickHouse系列之数据类型与表引擎介绍

4.ClickHouse系列之数据类型与表引擎介绍

时间:2022-10-21 21:33:05浏览次数:88  
标签:与表 String 数据类型 publish 索引 引擎 date id ClickHouse

上篇文章已经创建过表及熟悉了基本语法,本文介绍CK的数据类型以及表引擎的一些分类与作用

1. 数据类型

类型
整型 Int8 Int16 Int32 Int64
浮点型 Float32 Float64
Decimal型 Decimal Decimal32 Decimal64 Decimal128
字符串 String FixedString
枚举类型 Enum8 Enum16
时间 Date DateTime
数组 Array

2. 表引擎的使用

表引擎【引擎名称大小写敏感】决定了如何存储表的数据。包括:

  • 数据的存储方式和位置,写入读取位置
  • 支持哪些查询以及如何支持
  • 并发数据访问
  • 索引的使用(如果存在)
  • 是否可以执行多线程请求
  • 数据复制参数
2.1 TinyLog引擎

已列文件的形式保存在磁盘上,不支持索引,没有并发控制。一般保存少量数据的小表。

CREATE TABLE t_tiny_log(id String, name String) ENGINE=TinyLog
2.2 Memory引擎

内存引擎,数据已未压缩的原始形式保存在内存中,服务器重启数据就会消失。读写操作不会相互阻塞,不支持索引。简单查询下有非常高的性能表现(超过10G/S)

CREATE TABLE t_memory(id String, name String) ENGINE=Memory
2.3 MergeTree引擎

ClickHouse中最强大引擎当属MergeTree(合并树)引擎及该系列(*MergeTree)中的其他引擎,支持索引和分区。

DROP TABLE IF EXISTS study.house;
CREATE TABLE study.house (
    id String,
    city String,
    region String,
    name String,
    price Float32 TTL publish_date + interval 3 MONTH,
    publish_date DateTime,
    INDEX price price TYPE minmax GRANULARITY 3
) ENGINE=MergeTree PARTITION BY toYYYYMMDD(publish_date) PRIMARY KEY(id) ORDER BY (id, city, region, name)
SETTINGS index_granularity=8192
  • 对于主键id来说只是提供了数据的一级索引,但是却不是唯一约束。
  • 对于index_granularity索引粒度,指在稀疏索引中两个相邻索引对应数据的间隔
  • 主键【PRIMARY KEY(id)】必须是order by字段的前缀字段
  • 二级索引【INDEX price price TYPE minmax GRANULARITY 3】是对于一级索引粒度的粒度。如一级索引范围为【1,15】、【15,50】、【50,100】,【100,900】,如果二级索引粒度为3,则前三个一级索引范围合并【1,100】、【100,900】
  • TTL即time to live,MergeTree提供了可以管理表或列的生命周期的功能
2.4 ReplacingMergeTree引擎
DROP TABLE IF EXISTS study.house;
CREATE TABLE study.house (
    id String,
    city String,
    region String,
    name String,
    price Float32,
    publish_date DateTime
) ENGINE=ReplacingMergeTree(publish_date) PARTITION BY toYYYYMMDD(publish_date) PRIMARY KEY(id) ORDER BY (id, city, region, name)
SETTINGS index_granularity=8192
  • 实际上是以order by作为唯一键
  • 去重不能跨分区
  • 只有同一批插入或合并分区(合并时间不定)时才会去重,也可以手工合并optimize table study.house final;
  • 去重保留版本字段值【ReplacingMergeTree括号中参数publish_date为版本号】最大的,如果版本字段相同则按插入顺序保留最后一笔
2.5 SummingMergeTree引擎
DROP TABLE IF EXISTS study.house;
CREATE TABLE study.house (
    id String,
    city String,
    region String,
    name String,
    price Float32,
    publish_date DateTime
) ENGINE=SummingMergeTree(price) PARTITION BY toYYYYMMDD(publish_date) PRIMARY KEY(id) ORDER BY (id, city, region, name)
SETTINGS index_granularity=8192
  • 以SummingMergeTree()中指定的列作为汇总列
  • 以order by 列为准,作为维度列
  • 可以填写多列必须数字列,如果不填,以所有非维度列且为数字列的字段作为汇总列
  • 聚合不能跨分区
  • 只有同一批插入或合并分区(合并时间不定)时才会去重,也可以手工合并optimize table study.house final;
  • 其他的列按插入顺序保留第一行

欢迎关注公众号算法小生沈健的技术博客

标签:与表,String,数据类型,publish,索引,引擎,date,id,ClickHouse
From: https://www.cnblogs.com/shenjian-online/p/16814832.html

相关文章

  • ClickHouse(二)优化
    ClickHouse优化执行计划    AST(语法树)、SYNTAX(优化后的SQL语句)、PIPELINE(查看PIPELINE计划,可看线程数)建表优化    数据类型优化:1.限定好数据类型  2.......
  • python基础-数据类型间的转换
    数据类型转换:将自身数据类型转化成新的数据类型,并拥有新数据类型相关操作的过程;为方便更好的帮助处理业务,将数据变更为更适合业务场景的类型;a='1', 此时想使用数字的......
  • oracle数据类型
      oracle数据类型   有道是,磨刀不误砍柴工。多了解一些底层的东西,对于Oracle开发、维护大有裨益。个人总结了一些Oracle数据类型集解,相信读者阅读了本文以后,Oracle数据......
  • Golang基础-变量与数据类型
    变量变量的定义1.声明2.赋值3.使用//声明:var变量名变量类型varnamestring//赋值:name="xiaoming"//使用:fmt.Println(name)//声明+赋值//var变......
  • 数据绑定之数据类型转换
    springmvc已经创建好了数据转换和数据绑定的类如果我们的数据不符合他们定义好的格式,需要自己处理处理方式两种3.1方式1自定义转换类3.1.1创建转化类extendsPropertyEd......
  • 数据类型及运算
    C字符集1.大小写的英文字母:A--Z,a--z2.数字字符:0-93.专门符号(29个):!、#、%、^、&、*、_(下划线)+、=、-、~、<、>、/、\、|、‘“、  ;、    , ()   {}  ......
  • #打卡不停更#三方库移植之NAPI开发[2]C/C++与JS的数据类型转换
    在《三方库移植之NAPI开发[1]—HelloOpenHarmonyNAPI》通过一个HelloOpenHarmonyNAPI样例讲述了NPAI接口开发基础知识。本文在其基础上修改hellonapi.cpp文件,介绍JS类型......
  • 初始数据类型
    这些类型的大小是多少sizeof单位是什么-byte字节C语言规定sizeof(long)>=sizeof(int)  计算机中的单位有哪些1.bit-比特位最小的单位2.byte=8bit字......
  • Java基础数据类型
    目录一、数据类型分类整数类型字符类型布尔类型浮点类型二、数据类型的转换自动类型转换强制类型转换表达式类型的自动提升三、浮点类型计算精度丢失问题一、数据类型分类......
  • ClickHouse 使用Primary Key原因以及为什么与 Sorting Key 不同
    官方地址首先选择主键原因SelectingthePrimaryKey​Thenumberofcolumnsintheprimarykeyisnotexplicitlylimited.Dependingonthedatastructure,you......