一、数据类型

同MySQL,大同小异

二、数据库

数据库目前支持5种引擎:

  1. Ordinary:普通引擎,默认引擎
  2. 绝大多数情况,都会使用默认引擎,使用时无需刻意声明
  3. 在此数据库下可以使用任意类型表引擎
  4. Dictionary:字典引擎
  5. 会自动为所有数据字典创建它们的数据表
  6. Memory:内存引擎
  7. 一般用于存放临时数据
  8. 不会涉及任何磁盘操作,当服务重启后,数据会被清除
  9. Lazy:日志引擎
    1. 只能使用Log系列的引擎
    5. MySQL: MySQL引擎

三、默认值

表字段只支持三种默认值表达式的定义方式

  1. Default
  2. Materialized
  3. Alias
类型 支持显示赋值 select * 返回结果 支持持久化
defaule
materialized × ×
alias × × ×

四、临时表

相比普通表而言,临时表有如下两个特殊之处:

  1. 生命周期与会话绑定,支持Memory引擎,会话结束,数据表会销毁
  2. 临时表,不属于任何数据,所以在创建语句中,既没有数据库参数也没有表引擎参数
create temporary table table_name ()

临时表的优先级大于普通表,当两张表的表明相同时,优先读取临时表数据,所以,通常情况,无需特意使用临时表,临时表大多应用于Clickhouse的内部;

五、分区表

数据分区(partition)
数据分区是针对本地数据而言,是数据的一种纵向切分;
在查询过程中,可以跳过不必要的数据目录,从而提升查询性能

数据分片(shard)
数据分片是对数据的一种横向切分;

5.1 创建分区

create table partition_v1 (ID String,URL String,EventTime Date) Engine=MergeTree() partition by toYYYYMM(EventTime) order by ID

create table partition_v1 (ID String,URL String,EventTime Date) Engine=MergeTree()
partition by toYYYYMM(EventTime) order by ID

partiton by 指定分区键

分区键不应该使用粒度过细的数据字段

iZwz9cs3943soqusmlnb7tZ :) select table,partition,path from system.parts where table='partition_v1'SELECT table, partition, path
FROM system.parts
WHERE table = 'partition_v1'┌─table────────┬─partition─┬─path────────────────────────────────────────────────────────┐
│ partition_v1 │ 202107    │ /var/lib/clickhouse/data/default/partition_v1/202107_1_1_0/ │
└──────────────┴───────────┴─────────────────────────────────────────────────────────────┘1 rows in set. Elapsed: 0.002 sec.

5.2 查询分区

Clikchouse内置了许多system系统表,用于查询自身的状态信息,其中parts系统表专门用于查询数据表的分区信息;system.parts

iZwz9cs3943soqusmlnb7tZ :) select partition_id,name,table,database from system.parts where table='partition_v1'SELECT partition_id, name, table, database
FROM system.parts
WHERE table = 'partition_v1'┌─partition_id─┬─name─────────┬─table────────┬─database─┐
│ 202107       │ 202107_1_1_0 │ partition_v1 │ default  │
└──────────────┴──────────────┴──────────────┴──────────┘1 rows in set. Elapsed: 0.003 sec. iZwz9cs3943soqusmlnb7tZ :)

5.3 删除分区

alter table partition_v1 drop partition 202107


5.4 复制分区

Clickhouse支持将A表的分区数据快速复制到B表,该特性主要用于快速数据写入、多表间数据同步和备份的场景;

ALTER TABLE B REPLACE PARTITION partition_v1 FROM A

并不是任意数据表之间都能够相互复制,需要满足以下条件

  1. 两张表需要相同的分区键
  2. 表结构需要完全相同

5.5 重置分区

# 重置 partition_v1 表内的 201908 分区 URL 字段数据
ALTER TABLE partition_v1 CLEAR COLUMN URL in PARTITION 201908

5.6 卸载分区

表分区可以通过 detach 语句卸载,分区被卸载后,物理数据并没有被删除,而是被转移到了当前数据目录表的 detached 子目录中;

一旦分区,被移动到了 detached 子目录,代表已经脱离了clickhouse的管理,Clickhouse并不会主动清理文件,这些分区文件会一直存在,除非我们主动删除或者 attach 语句重新装载;

ALTER TABLE tb_name DETACH PARTITION partition_expr
ALTER TABLE tb_name ATTACH PARTITION partition_expr

iZwz9cs3943soqusmlnb7tZ :) alter table partition_v1 detach partition 202107ALTER TABLE partition_v1DETACH PARTITION 202107Ok.0 rows in set. Elapsed: 0.002 sec. iZwz9cs3943soqusmlnb7tZ :)

六、视图

ClickHouse支持两种视图

  1. 普通视图
  2. 简单的查询代理
  3. 不会存储任何数据,只是单纯的 select 查询映射,只能简化查询,明晰语义,对查询性能不会有任何提升

物化视图

  1. 支持表引擎,数据保存形式由它的表引擎决定
  2. populate
  3. 如果使用populate修饰,会将源数据表的数据全部导入
  4. 物化视图不支持同步删除,如果在源数据表中删除了数据,物化视图仍会保留
  5. 物化视图如果创建好,当源数据表被写入数据,物化视图也会同步更新
  6. 物化视图本身是一张特殊的表,使用 .inner 特殊前缀的数据表
create marterialized view db.table_name engine=engine_name populate as select ...

七、分布式DDL

如果在集群中任意一个节点上执行DDL,那么集群中的每一个节点都会以相同的顺序执行相同的语句

CREATE TABLE partition_v3 ON CLUSTER ch_cluster( ID String,URL String,EventTime Date
) ENGINE =  MergeTree()
PARTITION BY toYYYYMM(EventTime)
ORDER BY ID

八、数据删除/修改

Clickhouse提供了Update、Delete的能力,这类操作被称为“Mutation”查询;
1. Mutation 是一种很重的操作
2. Mutation 语句,是一个异步后台执行过程
3. 具体执行进度,需要通过 system.mutations 系统表查询

iZwz9cs3943soqusmlnb7tZ :) select * from partition_v1SELECT *
FROM partition_v1┌─ID───┬─URL───────────┬──EventTime─┐
│ A002 │ www.baidu.com │ 2021-07-01 │
└──────┴───────────────┴────────────┘1 rows in set. Elapsed: 0.002 sec. iZwz9cs3943soqusmlnb7tZ :) alter table partition_v1 delete where ID='A002'ALTER TABLE partition_v1DELETE WHERE ID = 'A002'Ok.0 rows in set. Elapsed: 0.013 sec. iZwz9cs3943soqusmlnb7tZ :)

可以发现,执行了delete操作之后,每一个原有的数据目录都额外增加了一个同名目录,并且在末尾增加了 _4 的后缀;

mutation_4.txt 是一个日志文件,完整地记录了这次delete操作的执行语句和时间;

mutation_4.txt 是一个日志文件,完整地记录了这次delete操作的执行语句和时间;

 select database,table,mutation_id,block_numbers.number as number,is_done from system.mutations

为什么是以"_4"生成文件?

每执行一条 alter delete 语句,都会在 mutations 系统表中生成一条对应的执行计划,当 is_done=1 时表示执行完毕;

同时,在数据的根目录下,会以 mutation_id 为名生成对应的日志文件用于记录相关信息

旧的数据目录并不会立即被删除,而是会被标记成非激活状态(active=0)

等到MergeTree引擎下一次合并动作触发时,这些非激活目录才会被真正从物理意义上删除;

Clickhouse_4_数据定义相关推荐

  1. GitHub上YOLOv5开源代码的训练数据定义

    GitHub上YOLOv5开源代码的训练数据定义 代码地址:https://github.com/ultralytics/YOLOv5 训练数据定义地址:https://github.com/ultr ...

  2. mysql数据定义语句有哪些_MySQL语法一:数据定义语句 钓鱼翁

    MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...

  3. 实验1 应用SQL Server进行数据定义和管理

    实验1 应用SQL Server进行数据定义和管理 [实验目的] 1)熟悉SQL Server的配置和管理. 2)掌握数据库的定义和修改方法. 3)掌握表的定义和修改方法. 4)掌握使用SQL语句进行 ...

  4. MySQL基础篇:数据定义语言DDL

    文章目录 1.介绍 2.操作数据库Database 创建数据库 查看有哪些数据库 删除数据库 选择数据库 查看当前正在使用哪个数据库 3.表结构的操作 查看当前数据库的所有表 创建表结构 查看表结构 ...

  5. SQL数据定义、查询、更新+空值的处理 实践学习报告

    本篇博客分享的是博主的各种数据操作-实践详细过程(以截图方式展示) 软件:Oracle  SQL  developer,希望对大家有所帮助咯! 目录 1.学生-课程数据库 2.1.数据定义理论 2.2 ...

  6. MySQL学习笔记(5)之数据定义类型

    数据定义类型总汇 1.整数型: 整数类型 字节 有符号范围 无符号范围 用途 tinyint 1 (-128,127) (0,255) 小整数 smallint 2 (-32 768,32 767) ...

  7. oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...

    oracle(sql)基础篇系列(三)--数据维护语句.数据定义语句.伪列 DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 ...

  8. ADO.NET Entity Framework 使用数据定义语言(实体框架)

    从 .NET Framework 版本 4 开始,实体框架支持数据定义语言 (DDL).这样,您将能够基于连接字符串和存储元数据 (SSDL) 模型创建或删除数据库实例. ObjectContext ...

  9. Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL、数据操作语句DML、数据控制语句DCL、其他基本语句、流程控制语句、批处理语句)概念及其相关案例之详细攻略

    Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL.数据操作语句DML.数据控制语句DCL.其他基本语句.流程控制语句.批处理语句)概念及其相关案例之详细攻略 目录 T-S ...

最新文章

  1. mysql 二进制日志 解析c++_mysql二进制日志文件恢复数据库
  2. 使用Callable和Future接口创建线程
  3. (11)Spring Boot配置ContextPath【从零开始学Spring Boot】
  4. AUP2敏捷统一过程之一:序言及降低过程的总体拥有成本
  5. 客户端访问https时应无浏览器(含终端)安全警告信息;_https和http有什么区别(内附详细分析)...
  6. Linux实现的IEEE 802.q VLAN
  7. sort和qsort函数的用法
  8. 带有LLVM的eBPF组件
  9. MVC 程序开发对汽车种类的联动查询。厂商,系列,型号
  10. reverse-nodes-in-k-group
  11. 自定义控件使用InnerDefaultProperty提示“内不允许包含文字内容”
  12. rsync使用(二)
  13. 手机在线编程软件Anycodes
  14. 大学生咖啡网页制作教程 表格布局网页模板 学生HTML静态美食网页设计作业成品 简单网页制作代码 学生美食网页作品免费设计
  15. 如何解决Harbor的502问题
  16. ESP定律脱压缩壳aspack
  17. MATLAB分析频谱
  18. 咸鱼的 GitHub 情报 | 20200103 期
  19. “3.15”曝光的人脸识别摄像头,错在用错了场所
  20. 【Python3 笔记】《笨办法学Python》

热门文章

  1. html5图片墙,超炫酷。
  2. 最近积累的JS 东西,分享一下
  3. 享拍app v1.8.1官方iPhone版
  4. 在powerpoint中默认的视图是_在PowerPoint中,默认的视图模式是
  5. 机器视觉硬件篇--线激光3d相机介绍及编程
  6. 亚马逊饱受争议的AI识图工具Rekognition,正被用于提取医学图像中的患者隐私...
  7. html5使用新字体,html5 – 使用带有canvas fillText的font-face字体
  8. Redis 无法持久化到硬盘错误:not able to persist on disk
  9. iOS 使用百度地图,仿滴滴打车的定位方法。拖动时时定位
  10. flyme6 yunos android,Android版Flyme对比Flyme Powered by YunOS