ClickHouse 数据库DML和DDL操作

一、 数据库
1、 语法:CREATE DATABASE [IF NOT EXISTS] db_name [ENGINE = engine]
2、 数据库目前支持5种引擎:
 Oridinary:默认引擎,无须声明
 Dictionary:字段引擎
 Memory:内存引擎,用于存放临时数据
 Lazy:日志引擎,只能使用与Log系列的表引擎
 MySQL:此类数据库下的表会自动拉取MySQL数据库的数据
3、 查看数据库:SHOW DATABASES
4、 删除数据库:DROP DATABASE [IF EXISTS] db_name
二、 创建表
1、 方法一:一般方法

CREATE TABLE [IF NOT EXISTS] [db_name].table_name(
   name1 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],
   name2 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],..
) ENGINE = engine

[db_name]:指定数据库,如果为空,默认是default
engine:表的引擎,根据数据库引擎来选择使用的表引擎
2、 方法二:复制其他表的结构
CREATE TABLE [IF NOT EXISTS] [db_name1].table_name AS
[db_name2].table_name2 [ENGINE=engine]
表之间的引擎可以不一样
3、 方法三:通过SELECT子句的方式创建

CREATE TABLE [IF NOT EXISTS] [db_name1].table_name ENGINE=engine AS SELECT

4、 删除表

DROP TABLE [IF EXISTS] [db_name].table_name

5、 查看表

DESC [db_name].table_name

三、 字段的默认表达式
1、 数据写入:只有DEFAULT的字段可以出现在INSERT语句中,MATERIALIZED和ALIAS不能显示赋值,是通过计算取值。
2、 数据查询:只有DEFAULT的字段才能通过SELECT * 返回。而MATERIALIZED和ALIAS不会出现在SELECT * 的结果集中。
3、 数据存储:只有DEFAULT和MATERIALIZED类型的字段才支持持久化,而ALIAS类型的字段不支持持久化,数据不会落盘到磁盘
4、 修改默认值:

ALTER TABLE [db_name].table_name MODIFY COLUMN col_name DEFAULT value

修改默认值不会影响数据表内先前已经存在的数据。
四、 临时表
CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name(
name1 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],
name2 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],
……
)
 它的生命周期是会话绑定的,只支持Memory表引擎,如果会话结束,数据表就会销毁。
 临时表不属于任何数据库,在创建表时不用指定数据库和表引擎
 如果临时表的表名和普通表的表名一样时,优先读取临时表的数据。
五、 分区表

CREATE TABLE [IF NOT EXISTS] table_name(
   name1 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],
   name2 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],..
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(column)
ORDER BY column

六、 普通视图
CREATE VIEW [IF NOT EXISTS] [db_name1].table_name AS SELECT ….
七、 物化视图
CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db_name1].table_name
[TO[db.]name] [ENGINE=engine] [POPULATE] AS SELECT ….
八、 ALTER操作
只有MergeTree、Merge和Distributed这三类表引擎支持ALTER
1、 追加新字段

ALTER TABLE tb_name ADD COLUMN [IF NOT EXISTS] name [type] [default_expr [AFTER name_after]

2、 修改数据类型

ALTER TABLE tb_name MODIFY COLUMN [IF EXISTS] name [type] [default_expr]

3、 修改备注

ALTER TABLE tb_name COMMENT COLUMN [IF EXISTS] name ‘描述信息’

4、 删除已有字段

ALTER TABLE tb_name DROP COLUMN [IF EXISTS] name

5、 移动数据表

RENAME TABLE [db_name11.]tb_name11 TO [db_name12.]tb_name12

6、 清空数据表

TRUNCATE TABLE [IF EXITS] [db_name.]tb_name

九、 数据分区的基本操作
1、 查看分区
system.parts表查看
2、 删除分区

ALTER TABLE tb_name DROP PARTITION partition_expr

3、 复制分区数据
将A表的分区partition_expr复制到B表

ALTER TABLE B REPLACE partition_expr FROM A

复制条件:
 两张表需要拥有相同的分区键
 表结构必须相同
4、 重置分区数据

ALTER TABLE tb_name CLEAR COLUMN column_name IN PARTITION partition_expr

5、 卸载与装载分区

ALTER TABLE tb_name DETACH/ATTACH PARTITION partition_expr

十、 分布式DDL执行

CREATE TABLE [IF NOT EXISTS] table_name ON CLUSTER cluster_name(
   name1 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],
   name2 [TYPE] [DEFAULT|MATERIALIZED|ALIAS expr],..
) ENGINE = engine

分布式节点都会创建对应的表
十一、 数据写入
1、 常用

INSERT INTO [db.]table [(c1,c2,c3,c4…)] values 
(v11,v12,v13,v14….),(v21,v22,v23,v24…).

2、 指定格式
INSERT INTO [db.]table [(c1,c2,c3,c4…)] FORMAT format_name data_set
示例:

INSERT INTO gmall.item_master FORMAT CSV \
‘80001,’测试’,30001,2021-05-01 12:43:23’\
‘80002,’测试’,30001,2021-05-01 14:25:23’\
‘80003,’测试’,30002,2021-05-01 16:13:23’\

3、 SELECT子句

INSERT INTO [db.]table [(c1,c2,c3,c4…)] SELECT.

十二、 数据删除与修改
异步操作,不支持事务,统称为Mutation语句。语句提交后立即返回,并不代表逻辑执行完成,具体执行进度通过system.mutation查询。

ALTER TABLE [db.]tb_name DELETE WHERE filter_expr
ALTER TABLE [db.]tb_name UPDATE column1=expr1 [,] WHERE filter_expr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值