Clickhouse_4_数据定义
一、数据类型
同MySQL,大同小异
二、数据库
数据库目前支持5种引擎:
- Ordinary:普通引擎,默认引擎
- 绝大多数情况,都会使用默认引擎,使用时无需刻意声明
- 在此数据库下可以使用任意类型表引擎
- Dictionary:字典引擎
- 会自动为所有数据字典创建它们的数据表
- Memory:内存引擎
- 一般用于存放临时数据
- 不会涉及任何磁盘操作,当服务重启后,数据会被清除
- Lazy:日志引擎
1. 只能使用Log系列的引擎
5. MySQL: MySQL引擎
三、默认值
表字段只支持三种默认值表达式的定义方式
- Default
- Materialized
- Alias
类型 | 支持显示赋值 | select * 返回结果 | 支持持久化 |
---|---|---|---|
defaule | √ | √ | √ |
materialized | × | × | √ |
alias | × | × | × |
四、临时表
相比普通表而言,临时表有如下两个特殊之处:
- 生命周期与会话绑定,支持Memory引擎,会话结束,数据表会销毁
- 临时表,不属于任何数据,所以在创建语句中,既没有数据库参数也没有表引擎参数
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 IDpartiton 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
并不是任意数据表之间都能够相互复制,需要满足以下条件
- 两张表需要相同的分区键
- 表结构需要完全相同
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支持两种视图
- 普通视图
- 简单的查询代理
- 不会存储任何数据,只是单纯的 select 查询映射,只能简化查询,明晰语义,对查询性能不会有任何提升
物化视图
- 支持表引擎,数据保存形式由它的表引擎决定
- populate
- 如果使用populate修饰,会将源数据表的数据全部导入
- 物化视图不支持同步删除,如果在源数据表中删除了数据,物化视图仍会保留
- 物化视图如果创建好,当源数据表被写入数据,物化视图也会同步更新
- 物化视图本身是一张特殊的表,使用 .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_数据定义相关推荐
- GitHub上YOLOv5开源代码的训练数据定义
GitHub上YOLOv5开源代码的训练数据定义 代码地址:https://github.com/ultralytics/YOLOv5 训练数据定义地址:https://github.com/ultr ...
- mysql数据定义语句有哪些_MySQL语法一:数据定义语句 钓鱼翁
MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...
- 实验1 应用SQL Server进行数据定义和管理
实验1 应用SQL Server进行数据定义和管理 [实验目的] 1)熟悉SQL Server的配置和管理. 2)掌握数据库的定义和修改方法. 3)掌握表的定义和修改方法. 4)掌握使用SQL语句进行 ...
- MySQL基础篇:数据定义语言DDL
文章目录 1.介绍 2.操作数据库Database 创建数据库 查看有哪些数据库 删除数据库 选择数据库 查看当前正在使用哪个数据库 3.表结构的操作 查看当前数据库的所有表 创建表结构 查看表结构 ...
- SQL数据定义、查询、更新+空值的处理 实践学习报告
本篇博客分享的是博主的各种数据操作-实践详细过程(以截图方式展示) 软件:Oracle SQL developer,希望对大家有所帮助咯! 目录 1.学生-课程数据库 2.1.数据定义理论 2.2 ...
- MySQL学习笔记(5)之数据定义类型
数据定义类型总汇 1.整数型: 整数类型 字节 有符号范围 无符号范围 用途 tinyint 1 (-128,127) (0,255) 小整数 smallint 2 (-32 768,32 767) ...
- oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...
oracle(sql)基础篇系列(三)--数据维护语句.数据定义语句.伪列 DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 ...
- ADO.NET Entity Framework 使用数据定义语言(实体框架)
从 .NET Framework 版本 4 开始,实体框架支持数据定义语言 (DDL).这样,您将能够基于连接字符串和存储元数据 (SSDL) 模型创建或删除数据库实例. ObjectContext ...
- Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL、数据操作语句DML、数据控制语句DCL、其他基本语句、流程控制语句、批处理语句)概念及其相关案例之详细攻略
Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL.数据操作语句DML.数据控制语句DCL.其他基本语句.流程控制语句.批处理语句)概念及其相关案例之详细攻略 目录 T-S ...
最新文章
- mysql 二进制日志 解析c++_mysql二进制日志文件恢复数据库
- 使用Callable和Future接口创建线程
- (11)Spring Boot配置ContextPath【从零开始学Spring Boot】
- AUP2敏捷统一过程之一:序言及降低过程的总体拥有成本
- 客户端访问https时应无浏览器(含终端)安全警告信息;_https和http有什么区别(内附详细分析)...
- Linux实现的IEEE 802.q VLAN
- sort和qsort函数的用法
- 带有LLVM的eBPF组件
- MVC 程序开发对汽车种类的联动查询。厂商,系列,型号
- reverse-nodes-in-k-group
- 自定义控件使用InnerDefaultProperty提示“内不允许包含文字内容”
- rsync使用(二)
- 手机在线编程软件Anycodes
- 大学生咖啡网页制作教程 表格布局网页模板 学生HTML静态美食网页设计作业成品 简单网页制作代码 学生美食网页作品免费设计
- 如何解决Harbor的502问题
- ESP定律脱压缩壳aspack
- MATLAB分析频谱
- 咸鱼的 GitHub 情报 | 20200103 期
- “3.15”曝光的人脸识别摄像头,错在用错了场所
- 【Python3 笔记】《笨办法学Python》
热门文章
- html5图片墙,超炫酷。
- 最近积累的JS 东西,分享一下
- 享拍app v1.8.1官方iPhone版
- 在powerpoint中默认的视图是_在PowerPoint中,默认的视图模式是
- 机器视觉硬件篇--线激光3d相机介绍及编程
- 亚马逊饱受争议的AI识图工具Rekognition,正被用于提取医学图像中的患者隐私...
- html5使用新字体,html5 – 使用带有canvas fillText的font-face字体
- Redis 无法持久化到硬盘错误:not able to persist on disk
- iOS 使用百度地图,仿滴滴打车的定位方法。拖动时时定位
- flyme6 yunos android,Android版Flyme对比Flyme Powered by YunOS