按行号取多行查询里的一格,重跑、核对时行序不定的照实标出来:sql_semantics.ordered / row_stable 认这一行重跑时还是不是同一行(最外层带 ORDER BY 的按位置认,一定只出一行的第 0 行认得住,别的行序不定)。口径账本的比对记下 ordered、one_row,指标标签按「同一行」认来自口径只在行认得住时成立,行序不定的标相关、写明原因;口径召回里两版都按行号取一格、查询又没有 ORDER BY 的指标记行序不定(changed 为空),召回待办上写「行序不定」,不按位置硬比;对账的多行对齐每一组先核对那一行的维度就是它,重跑时缺了一行、多出一行错位的记空值,不拿别的维度的数冒充

This commit is contained in:
ThearchyHelios
2026-10-19 10:01:05 +08:00
parent 358206312e
commit aee237f457
10 changed files with 250 additions and 17 deletions
+2
View File
@@ -99,6 +99,8 @@ export const RECALL_TEXT = {
original: '原答案当时的值',
changed: '变了',
same: '没变',
rowOrder: '行序不定',
rowOrderHint: '取的是多行结果里按行号的一格,查询没有排序,重新执行时这一行可能是另一行,两版按位置比不出变没变',
masked: '已遮罩',
missing: '—',
answers: '用到这份口径的答案',
+9 -4
View File
@@ -121,12 +121,17 @@ function Metrics({ payload, onOpen }: { payload: Partial<RecallTaskPayload>; onO
</thead>
<tbody>
{metrics.map((m) => (
<tr key={m.k} className="border-t" data-recall-metric={m.metric} data-changed={m.changed ? 'true' : 'false'}>
<tr key={m.k} className="border-t" data-recall-metric={m.metric}
data-changed={m.row_order === 'unstable' ? 'unknown' : m.changed ? 'true' : 'false'}>
<td className="px-2 py-1">
{m.name}
<span className="ml-1 text-faint" style={m.changed ? { color: 'var(--st-waiting)' } : undefined}>
{m.changed ? T.changed : T.same}
</span>
{m.row_order === 'unstable' ? (
<span className="ml-1 text-faint" title={T.rowOrderHint} data-recall-row-order="">{T.rowOrder}</span>
) : (
<span className="ml-1 text-faint" style={m.changed ? { color: 'var(--st-waiting)' } : undefined}>
{m.changed ? T.changed : T.same}
</span>
)}
</td>
{(['old', 'new', 'diff'] as const).map((side, i) => (
<td key={side} className="px-2 py-1 text-right">
+4 -1
View File
@@ -151,7 +151,10 @@ export interface RecallTaskPayload {
k: number
name: string
unit: string
changed: boolean
/** 行序不定(row_order)时为 null:按位置比不出变没变 */
changed: boolean | null
/** 两版都按行号取多行结果里的一格、查询没有 ORDER BY:重跑时第几行不一定是同一行(服务端 ledger/recall.recall_card) */
row_order?: 'unstable'
card: string
metric: string
old: RecallCell