您可以使用此基本查询格式更新数据。详情请参考更新操作(UPDATE)。
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] [IN PARTITION partition_id] WHERE filter_expr;
说明
ALTER TABLE 的前缀使这个语法与其他大多数支持 SQL 的系统不同。它的目的是表明,与 OLTP 数据库中的类似查询不同,这是一个繁重的操作,不是为频繁使用而设计。
参数说明:
[IN PARTITION partition_id]:如果表数据量较大,或者表的 part 数量较多,建议添加该条件,分区级别执行 update 操作,更快、更稳定。
使用限制:
filter_expr必须是UInt8类型。这个查询将指定列的值更新为行中相应表达式的值,对于这些行,filter_expr取值为非零。使用CAST操作符将数值映射到列的类型上。不支持更新用于计算主键或分区键的列。-- 1. 创建库 CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster; -- 2. 创建测试表(集群级) DROP TABLE IF EXISTS sample_db.sample_table ON CLUSTER sample_cluster; CREATE TABLE if not exists sample_db.sample_table ON CLUSTER sample_cluster ( uint8 UInt8, bool UInt8 ) ENGINE = MergeTree() ORDER BY uint8; -- 3. 插入测试数据 INSERT INTO sample_db.sample_table (uint8, bool) VALUES (20, 0), (21, 0), (22, 0); -- 4. 验证初始数据 SELECT * FROM sample_db.sample_table ORDER BY uint8; -- 5. 执行 ALTER UPDATE(将 uint8=21 的行的 bool 字段更新为 1) ALTER TABLE sample_db.sample_table UPDATE bool = 1 WHERE uint8 = 21; -- 5. 验证更新结果 SELECT * FROM sample_db.sample_table ORDER BY uint8;