DIFF TABLE actual_result AGAINST expected_result;
-- 基线库:输入表 + 结果模板表 CREATE TABLE test.orders_input (id INT PRIMARY KEY, amount DECIMAL(10,2), status VARCHAR(20)); INSERT INTO test.orders_input VALUES(1, 100, 'pending'), (2, 200, 'pending'); CREATE TABLE test.result_template (id INT PRIMARY KEY, final_amount DECIMAL(10,2)); -- 每次测试先 Fork 一份隔离环境 FORK DATABASE test TO test_run; -- Agent 写的业务逻辑跑出来的实际结果 FORK TABLE test_run.result_template TO test_run.actual_result; INSERT INTO test_run.actual_result SELECT id, CASE WHEN amount >= 150 THEN amount * 0.9 ELSE amount END FROM test_run.orders_input; -- 人工或规则系统给出的预期结果 FORK TABLE test_run.result_template TO test_run.expected_result; INSERT INTO test_run.expected_result VALUES(1, 100), (2, 180); -- 对比实际结果和预期结果 DIFF TABLE test_run.actual_result AGAINST test_run.expected_result;
FORK DATABASE source_database TO destination_database;
-- 创建库副本 FORK DATABASE db_src TO db_fork; -- 目标库可查询 USE db_fork; SELECT count(*) FROM t1; -- 目标库可写入(写入不会影响源库 db_src) INSERT INTO t1 VALUES(...);
-- 1) 基于主版本创建分支版本(数据基线为 fork 时刻快照) FORK DATABASE db_prod TO db_prod_branch_v2; -- 2) 在分支库上进行实验性变更 -- ... 对 db_prod_branch_v2 中的表执行 DML/业务流程 ... -- 3a) 快速回滚:停止使用分支版本 DROP DATABASE db_prod_branch_v2;
CREATE TABLE demo.student_base (id INT PRIMARY KEY, name VARCHAR(20), score INT); INSERT INTO demo.student_base VALUES(1, 'Alice', 80), (2, 'Bob', 90), (3, 'Charlie', 70); FORK TABLE demo.student_base TO demo.t_current; FORK TABLE demo.student_base TO demo.t_incoming; UPDATE demo.t_incoming SET score = 85 WHERE id = 1; DELETE FROM demo.t_incoming WHERE id = 2; INSERT INTO demo.t_incoming VALUES(4, 'David', 95); -- 先看差异 DIFF TABLE demo.t_incoming AGAINST demo.t_current; -- 再决定是否合并;这里用 THEIRS 表示冲突时采用 incoming 版本 MERGE TABLE demo.t_incoming INTO demo.t_current STRATEGY THEIRS; -- 合并后查看结果 SELECT * FROM demo.t_current ORDER BY id;
__table __flag id name score t_current INSERT 1 Alice 80 t_incoming INSERT 1 Alice 85 t_current INSERT 2 Bob 90 t_incoming INSERT 4 David 95
id name score 1 Alice 85 2 Bob 90 3 Charlie 70 4 David 95
DIFF TABLE incoming_db.incoming_t AGAINST current_db.current_t;
MERGE TABLE incoming_db.incoming_t INTO current_db.current_t
STRATEGY {FAIL | THEIRS | OURS};
-- Agent 开发:先 Fork 一份实验库,在副本上改 FORK DATABASE prod TO exp_labeled_data_v2; -- Agent 执行标注逻辑,写入 exp_labeled_data_v2.labeled_data ... -- 自测:DIFF 验证改动是否符合预期 DIFF TABLE exp_labeled_data_v2.labeled_data AGAINST prod.labeled_data; -- 上生产:Fork 灰度库,切小流量,跑一段时间后 FORK DATABASE prod TO prod_gray; -- 小流量写入 prod_gray.labeled_data ... -- 检查无异常后 DIFF TABLE prod_gray.labeled_data AGAINST prod.labeled_data; MERGE TABLE prod_gray.labeled_data INTO prod.labeled_data STRATEGY THEIRS;
-- 基线用户集:先落一份对照组数据 CREATE TABLE exp.clicks_base (user_id INT PRIMARY KEY, age INT, click_count INT); INSERT INTO exp.clicks_base VALUES(1, 25, 2), (2, 35, 4), (4, 45, 1); -- 基于同一份基线 Fork 出实验组和对照组 FORK TABLE exp.clicks_base TO exp.control_clicks; FORK TABLE exp.clicks_base TO exp.experiment_clicks; -- 实验组写入新按钮流量后的结果 UPDATE exp.experiment_clicks SET click_count = 3 WHERE user_id = 1; UPDATE exp.experiment_clicks SET click_count = 5 WHERE user_id = 2; DELETE FROM exp.experiment_clicks WHERE user_id = 4; INSERT INTO exp.experiment_clicks VALUES(3, 25, 2); -- DIFF 对比:差异行直接带 age,可分析「哪个年龄段在实验组有更多点击」 DIFF TABLE exp.experiment_clicks AGAINST exp.control_clicks; -- 冲突行 = 同一 user_id 在两组的 click_count 不同(如 user_id=1: 2 vs 3) -- 独有行 = 仅在一组出现的用户(如 user_id=3 实验组独有,user_id=4 对照组独有),含 age -- 差异行自带 age,按 age 聚合即可回答「哪个年龄段差异大」
-- 开发者 A:Fork 并修改 FORK DATABASE test_db TO test_db_feature_a; UPDATE test_db_feature_a.orders SET status = 'shipped' WHERE id = 1; INSERT INTO test_db_feature_a.orders VALUES(10, 100, 99.9, 'pending'); -- 合并前查看改动 DIFF TABLE test_db_feature_a.orders AGAINST test_db.orders; -- 确认后合回 MERGE TABLE test_db_feature_a.orders INTO test_db.orders STRATEGY THEIRS;
-- 风控线 Fork 并修改 FORK DATABASE prod TO prod_riskfix; UPDATE prod_riskfix.orders SET risk_flag = 1 WHERE order_id = 10002; -- 活动线 Fork 并修改 FORK DATABASE prod TO prod_promo; UPDATE prod_promo.orders SET amount = amount * 0.9 WHERE order_id IN (10001, 10002); -- 先合风控 MERGE TABLE prod_riskfix.orders INTO prod.orders STRATEGY THEIRS; -- 再合活动(若有冲突,选 THEIRS 或 OURS) DIFF TABLE prod_promo.orders AGAINST prod.orders; MERGE TABLE prod_promo.orders INTO prod.orders STRATEGY THEIRS;
-- Fork 出实验库 FORK DATABASE prod TO exp_training_data_v2; -- 在 exp_training_data_v2.training_data 上做新标注、调参 ... -- 查看改动量 DIFF TABLE exp_training_data_v2.training_data AGAINST prod.training_data; -- 验证通过后合回 MERGE TABLE exp_training_data_v2.training_data INTO prod.training_data STRATEGY THEIRS;
-- 先 Fork 一本地工作库 FORK DATABASE local TO sync_workspace; -- 远端数据已导入 sync_workspace.remote_snapshot -- 预览差异 DIFF TABLE sync_workspace.remote_snapshot AGAINST local.main_table; -- 以远端为准合入 MERGE TABLE sync_workspace.remote_snapshot INTO local.main_table STRATEGY THEIRS; -- 或以本地为准,只补新增 MERGE TABLE sync_workspace.remote_snapshot INTO local.main_table STRATEGY OURS;
-- 预期表 qa.expected,待审副本 qa.actual_review 由生产表 Fork 而来 FORK TABLE prod.actual TO qa.actual_review; DIFF TABLE qa.actual_review AGAINST qa.expected; -- 有输出即表示存在不一致(冲突=值不同,独有=缺失或多余)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69909943/viewspace-3174253/ ,如需转载,请注明出处,否则将追究法律责任。