数据类型
数据库&数据表
创建数据库语法同mysql语法;其中引擎部分支持5种引擎:
- Ordinary:此数据库下可以使用任意类型的表引擎;
- Dictionary:字典引擎;
- Memory:内存引擎,用于存放临时数据,不会进行磁盘操作,当服务重启后数据会被清除;
- Lazy:日志引擎,此类数据库下只能使用Log系列的表引擎;
- MySQL:MySQL引擎,此类数据库下会自动拉取远端MySQL中的数据,并为它们创建MySQL表引擎的数据表。
创建表
常规定义方法,同mysql的建表语法;
复制其他表的结构:支持在不同的数据库之间复制表结构
CREATE TABLE [IF NOT EXISTS][db_name.]table_name AS [db_name2.] table_name2 [ENGINE=engine]
通过SELECT字句的形式创建:会将表结构和数据一并写入新表
CREATE TABLE [IF NOT EXISTS][db_name.]table_name ENGINE = engine AS SELECT ...
删除表
DROP TABLE [IF EXISTS] [db_name.] table_name
默认值表达式
表字段支持三种默认值表达式的定义方法,分别是DEFAULT、MATERIALIZED和ALIAS。
在数据写入时,只有DEFAULT类型的字段可以出现在INSERT语句中。而MATERIALIZED和ALIAS都不能被显式赋值,它们只能依靠计算取值。
在数据查询时,只有DEFAULT类型的字段可以通过SELECT *返回。而MATERIALIZED和ALIAS类型的字段不会出现在SELECT *查询的返回结果集中。
在数据存储时,只有DEFAULT和MATERIALIZED类型的字段才支持持久化。如果使用的表引擎支持物理存储(例如TinyLog表引擎),那么这些列字段将会拥有物理存储。而ALIAS类型的字段不支持持久化,它的取值总是需要依靠计算产生,数据不会落到磁盘。
临时表
创建临时表的方法是在普通表的基础之上添加TEMPORARY关键字;
它的生命周期是会话绑定的,所以它只支持Memory表引擎,如果会话结束,数据表就会被销毁;
临时表不属于任何数据库,所以在它的建表语句中,既没有数据库参数也没有表引擎参数;
临时表的优先级是大于普通表的。当两张数据表名称相同的时候,会优先读取临时表的数据。
视图
ClickHouse拥有普通和物化两种视图,其中物化视图拥有独立的存储,而普通视图只是一层简单的查询代理;
CREATE VIEW [IF NOT EXISTS] [db.name.]view_name AS SELECT...
普通视图不存储数据,只是select查询映射,对查询性能不会有任何增强。
物化视图支持表引擎,数据保存形式由它的表引擎决定,物化视图源表写入新数据之后,物化视图也会同步更新。
POPULATE修饰符决定了物化视图的初始化策略:如果使用了POPULATE修饰符,那么在创建视图的过程中,会连带将源表中已存在的数据一并导入,如同执行了SELECT INTO一般;反之,如果不使用POPULATE修饰符,那么物化视图在创建之后是没有数据的,它只会同步在此之后被写入源表的数据。物化视图目前并不支持同步删除,如果在源表中删除了数据,物化视图的数据仍会保留。
数据表操作
追加新字段
ALTER TABLE 表名 ADD COLUMN 列名称 列类型 [AFTER|DEFAULT] 字段名称
修改数据类型
类型不兼容会修改失败
ALTER TABLE 表名 MODIFY COLUMN 列名称 列类型
修改备注
ALTER TABLE 表名 COMMENT COLUMN 列名称 '列字段备注'
删除已有字段
ALTER TABLE 表名 DROP COLUMN 列名称
移动数据表
如果表名称相同,数据库不同,则启动移动数据库的作用;如果数据库相同,则修改数据表的名称。
数据表移动的目标数据库和原始数据库必须处在同一个服务节点内,而不能是集群中的远程节点。
RENAME TABLE 表名 TO 另一个表名
分区基本操作
system_parts系统表用于查询数据表的分区信息。
删除指定分区
ALTER TABLE 表名 DROP PARTITION 分区表达式
复制分区数据
两张表需要拥有相同的分区键;表结构完全相同
ALTER TABLE 表名 REPLACE PARTITION 分区表达式 FROM 表名
重置分区数据
ALTER TABLE 表名 CLEAR COLUMN 列名 IN PARTITION 分区表达式
卸载与装载分区
用于分区数据的迁移和备份场景
ALTER TABLE 表名 DETACH PARTITION 分区表达式 -- 卸载
ALTER TABLE 表名 ATTACH PARTITION 分区表达式 -- 装载