数据仓储OSS
尽管 ClickHouse 主要面向高吞吐量的分析型工作负载,但在某些情况下也可以修改或删除现有数据。这些操作称为“变更”,通过 ALTER TABLE 命令执行。
更新数据
ALTER TABLE...UPDATE 命令来更新表中的行:
<expression> 是满足 <filter_expr> 条件时该列的新值。<expression> 必须与该列的数据类型相同,或者能够使用 CAST 运算符转换为相同的数据类型。<filter_expr> 应为数据中的每一行返回一个 UInt8 值 (零或非零) 。多个 UPDATE <column> 语句可以合并到同一条 ALTER TABLE 命令中,并用逗号分隔。
示例:
-
如下变更可通过字典查找,将
visitor_ids更新为新的值: -
在一条命令中修改多个值,通常比执行多条命令更高效:
-
对于分片表,可以使用
ON CLUSTER执行变更:
无法更新属于主键或排序键一部分的列。
删除数据
ALTER TABLE 命令删除行:
<filter_expr> 应为每一行数据返回一个 UInt8 值。
示例
-
删除某列值位于给定值数组中的所有记录:
-
此查询会修改哪些数据?
若要删除表中的所有数据,使用
TRUNCATE TABLE [<database].]<table> 命令效率更高。该命令也可通过 ON CLUSTER 执行。DELETE 语句 文档页面。
轻量级删除
DELETE FROM 命令,这称为轻量级删除。被删除的行会立即标记为已删除,并会在后续所有查询中自动被过滤掉,因此你无需等待 parts 合并,也无需使用 FINAL 关键字。数据清理会在后台异步进行。
hits 表中 Title 列包含文本 hello 的所有行:
- 此功能仅适用于
MergeTree表引擎家族。 - 默认情况下,轻量级删除为同步执行,会等待所有副本完成删除处理。其行为由
lightweight_deletes_sync设置 控制。