clickhouse的SQL参考——(三)ALTER

参考资料

https://clickhouse.tech/docs/en/sql-reference/statements/alter/

版本:v20.11

目录

总览

突变(Mutations)

ALTER同步性

列操作(Column Manipulations)

ADD COLUMN

DROP COLUMN

CLEAR COLUMN

COMMENT COLUMN

MODIFY COLUMN

限制

操作分区(Manipulating Partitions and Parts)

DETACH PARTITION

DROP PARTITION

DROP DETACHED PARTITION|PART

ATTACH PARTITION|PART

ATTACH PARTITION FROM

REPLACE PARTITION

MOVE PARTITION TO TABLE

CLEAR COLUMN IN PARTITION

FREEZE PARTITION

CLEAR INDEX IN PARTITION

FETCH PARTITION

MOVE PARTITION|PART

如何设置分区表达式

删除操作(ALTER TABLE … DELETE)

更新操作(ALTER TABLE … UPDATE)

ORDER BY表达式(Manipulating Key Expressions)

SAMPLE BY表达式(Manipulating Sampling-Key Expressions)

INDEX(Manipulating Data Skipping Indices)

CONSTRAINT(Manipulating Constraints)

TTL(Manipulations with Table TTL)

ALTER USER

ALTER QUOTA

ALTER ROLE

ALTER ROW POLICY

ALTER SETTINGS PROFILE


总览

大多数ALTER查询都会修改表设置或数据:

大多数* ALTER查询仅支持* MergeTree表以及Merge和Distributed。

ALTER设置会修改基于角色的访问控制有关的实体:

突变(Mutations)

更改表数据的ALTER是通过一种称为“突变”的机制实现的。最值得注意的是 ALTER TABLE … DELETE 和 ALTER TABLE … UPDATE.。它们是异步后台进程,类似于MergeTree表中的合并,生成一种新的“突变”版本。

对于* MergeTree表,通过重写整个数据部分来执行变异。没有原子性,一部分数据准备好后,它们就会立即替换为突变的部分。在突变期间执行SELECT语句将会看到突变部分和未突变部分的数据。

突变完全按照创建顺序应用到各个数据部分,突变还通过INSERT INTO查询进行了部分排序:突变前插入表中的数据将发生突变,之后插入的数据将不会发生突变。请注意,突变不会以任何方式阻止插入。

在突变查询被提交后将立即开始突变(对于ZooKeeper是复制表,对于文件系统是非复制表)。

突变本身使用系统配置文件设置异步执行。要跟踪突变的进度,可以使用system.mutations表。

即使ClickHouse服务器重新启动,成功提交的突变如果没有执行完也会继续执行。

突变一旦提交就没有办法回滚。如果出现突变过程中卡住的情况, 可以使用KILL MUTATION来将其取消。

完成变异的条目不会立即删除(保留条目的数量由finish_mutations_to_keep存储引擎参数确定)。 较旧的突变条目将被删除。

ALTER同步性

对于非复制表,所有ALTER查询都是同步执行的。 对于复制的表,查询仅向ZooKeeper添加适当操作的指令,并且这些操作本身将尽快执行。 查询可以等待所有副本上完成这些操作。

对于ALTER ... ATTACH|DETACH|DROP 查询,可以使用replication_alter_partitions_sync来设置等待。 可能的值:0 –不等待; 1 –仅等待自己执行(默认); 2 –等待所有。

对于ALTER TABLE ... UPDATE | DELETE查询,其同步性是由mutations_sync设置定义的。

列操作(Column Manipulations)

允许更改表结构的查询。

ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

在查询中,指定一个或多个逗号分隔操作的列表。
每个动作都是对列的操作。

支持以下操作:

ADD COLUMN

ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [codec] [AFTER name_after]

给表添加一个新列,指定名称,类型,压缩类型codec,默认表达式。

如果包含IF NOT EXISTS子句,那么创建时遇到相同名称的列不会报错。如果指定AFTER name_after(另一列的名称),则该列将添加到列表中指定的列之后。否则,该列将添加到表的末尾。  请注意,无法将列添加到表的开头。对一系列的操作,name_after可以是之前的操作插入的列名。

添加列只会对表结构进行操作,不会对数据做操作。如果给列制定了默认表达式,ALTER后,数据也不会立刻出现落在磁盘上,合并数据后才会出现。

这种方法使我们能够立即完成ALTER查询,而无需增加旧数据量。

ALTER TABLE visits ADD COLUMN browser String AFTER user_id

DROP COLUMN

DROP COLUMN [IF EXISTS] name
--举例
ALTER TABLE visits DROP COLUMN browser

删除名称为name的列。 如果指定了IF EXISTS子句,则该列不存在时查询将不会返回错误。

从文件系统中删除数据。 由于此操作会删除整个文件,因此查询几乎立即完成。

CLEAR COLUMN

CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name
--举例
ALTER TABLE visits CLEAR COLUMN browser IN PARTITION tuple()

重置指定分区的列中的所有数据。 在如何指定分区表达式部分中阅读有关设置分区名称的更多信息。How to specify the partition expression.

如果指定了IF EXISTS子句,则该列不存在时查询将不会返回错误。

COMMENT COLUMN

COMMENT COLUMN [IF EXISTS] name 'comment'
--举例
ALTER TABLE visits COMMENT COLUMN browser 'The table shows the browser used for accessing the site.'
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aiky哇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值