fix(storage): recall_seen_count 批更新加 COALESCE —— NULL 行不再吞召回观测值 (t_5aa7cb77)

批路径 .column("recall_seen_count", "recall_seen_count + delta") 下推 DataFusion,
SQL 语义 NULL+n=NULL ⇒ 17717 行(43.8%)观测值静默丢失。改 COALESCE(recall_seen_count,0)+delta。
逐条 fallback 路径本就 NULL-aware(读现值 unwrap_or(0))且其 split_whitespace 3 段
解析不容 COALESCE,故不动并加注释防后人误改。
This commit is contained in:
小唯
2026-10-27 04:34:48 +08:00
parent 37dcebfce4
commit 0b2b4f01d8
+6 -1
View File
@@ -708,7 +708,12 @@ impl LanceDBOps {
let op = ttbl
.update()
.only_if(&predicate)
.column("recall_seen_count", &format!("recall_seen_count + {}", delta))
// C档 (t_5aa7cb77):recall_seen_count 是可空列(存量 43.8% 行为 NULL)。
// 裸 `recall_seen_count + delta` 在 NULL 上恒为 NULL ⇒ 观测值静默丢失。
// COALESCE(.., 0) 让 NULL 行按 0 起算(NULL+1 ⇒ 1)。不可空列行为不变。
// 注意:不得给逐条 fallback 的 value 字符串加 COALESCE —— 那走 current-value
// 算术解析(split_whitespace 期望恰好 3 段),COALESCE 会炸掉解析。
.column("recall_seen_count", &format!("COALESCE(recall_seen_count, 0) + {}", delta))
.column("last_recalled_at", &ts_lit);
rt().block_on(op.execute()).map_err(Into::into)
};