Lakehouse 数据更新与清理指南

概述

在数据仓库运维中,经常需要修正错误数据、清理过期记录或重置表数据。云器 Lakehouse 提供

UPDATE
UPDATE
DELETE
DELETE
TRUNCATE
TRUNCATE
三种数据修改方式,分别适用于不同的场景。本指南按业务场景分类,帮助你快速掌握安全高效的数据更新与清理方法。

涉及的 SQL 命令

命令用途适用场景
UPDATE ... SET ... WHERE
UPDATE ... SET ... WHERE
按条件更新行修正错误数据、状态变更
UPDATE ... ORDER BY ... LIMIT
UPDATE ... ORDER BY ... LIMIT
分批更新大数据量安全更新
DELETE FROM ... WHERE
DELETE FROM ... WHERE
按条件删除行清理过期或无效数据
TRUNCATE TABLE
TRUNCATE TABLE
清空全表快速重置表数据

前置准备

以下示例使用模拟的员工表

employees_update
employees_update

-- 创建测试表 CREATE TABLE IF NOT EXISTS employees_update ( emp_id INT, emp_name STRING, dept STRING, salary DOUBLE, status STRING ); -- 插入测试数据 INSERT INTO employees_update VALUES (1, 'Alice', 'Engineering', 12000, 'active'), (2, 'Bob', 'Engineering', 9500, 'active'), (3, 'Carol', 'Marketing', 8500, 'active'), (4, 'David', 'Marketing', 7800, 'inactive'), (5, 'Eve', 'HR', 6000, 'active');


条件更新数据

使用

UPDATE
UPDATE
语句修改满足条件的行。务必使用
WHERE
WHERE
子句限制更新范围。

-- 给 Engineering 部门员工涨薪 10% UPDATE employees_update SET salary = salary * 1.1 WHERE dept = 'Engineering';

结果验证

SELECT emp_id, emp_name, dept, salary FROM employees_update ORDER BY emp_id;

emp_idemp_namedeptsalary
1AliceEngineering13200
2BobEngineering10450
3CarolMarketing8500
4DavidMarketing7800
5EveHR6000

批量更新

当需要更新的行数极大时,使用

ORDER BY + LIMIT
ORDER BY + LIMIT
分批更新,避免长时间锁定。

-- 每次更新 2 行,按 emp_id 排序保证顺序 UPDATE employees_update SET status = 'reviewed' WHERE status = 'active' ORDER BY emp_id LIMIT 2;

结果验证

emp_idemp_namestatus
1Alicereviewed
2Bobreviewed
3Carolactive
5Eveactive

条件删除数据

使用

DELETE
DELETE
语句删除满足条件的行。同样建议使用
WHERE
WHERE
子句限制删除范围。

-- 删除状态为 inactive 的员工 DELETE FROM employees_update WHERE status = 'inactive';

结果验证

SELECT * FROM employees_update ORDER BY emp_id;

emp_idemp_namedeptsalarystatus
1AliceEngineering13200reviewed
2BobEngineering10450reviewed
3CarolMarketing8500active
5EveHR6000active

清空表数据

使用

TRUNCATE TABLE
TRUNCATE TABLE
快速清空整表数据,保留表结构。比
DELETE
DELETE
更高效。

-- 清空表数据 TRUNCATE TABLE employees_update;

结果验证

SELECT COUNT(*) FROM employees_update;

COUNT(*)
0

基于关联表的更新

当需要根据另一张表的数据更新当前表时,可以使用子查询或

MERGE INTO
MERGE INTO

-- 重新插入数据用于演示 INSERT INTO employees_update VALUES (1, 'Alice', 'Engineering', 13200, 'reviewed'), (2, 'Bob', 'Engineering', 10450, 'reviewed'); -- 创建薪资调整表 CREATE TABLE IF NOT EXISTS salary_adjustments ( emp_id INT, adjust_amount DOUBLE ); INSERT INTO salary_adjustments VALUES (1, 500), (2, 300); -- 使用子查询更新薪资 UPDATE employees_update SET salary = salary + ( SELECT adjust_amount FROM salary_adjustments WHERE salary_adjustments.emp_id = employees_update.emp_id ) WHERE emp_id IN (SELECT emp_id FROM salary_adjustments);

结果验证

emp_idemp_namesalary
1Alice13700
2Bob10750

清理测试数据

完成更新与清理验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS employees_update; DROP TABLE IF EXISTS salary_adjustments;


注意事项

  1. WHERE 子句
    UPDATE
    UPDATE
    DELETE
    DELETE
    强烈建议使用
    WHERE
    WHERE
    子句,避免误操作全表。
  2. 事务性:单次
    UPDATE
    UPDATE
    DELETE
    DELETE
    是原子操作,要么全部成功,要么全部失败。
  3. TRUNCATE 不可恢复
    TRUNCATE
    TRUNCATE
    操作不会保留历史版本,无法通过 Time Travel 恢复。
  4. 动态表限制:Dynamic Table 不支持直接
    UPDATE
    UPDATE
    DELETE
    DELETE
    ,数据由上游表变更触发自动刷新。
  5. 分批操作:大数据量更新/删除时,使用
    ORDER BY + LIMIT
    ORDER BY + LIMIT
    分批执行,避免长时间占用资源。

相关文档

联系我们
预约咨询
微信咨询
电话咨询