想象你是连锁餐厅中央厨房的主厨。每晚打烊后,团队把次日要用的食材统一清洗、切配、腌制,分装进保鲜盒送入冷库——这就是特征平台里的“离线批处理”:按固定节奏算好一批特征,存起来随时取用。某天你研发出惊艳的新酱料,想让过去三个月的熟客也“尝到”新味道——你不可能穿越回去,但可以把“若当时用了新配方会是怎样的口味”完整记录下来。这就是“特征回填”。本文用一场后厨的备餐与回锅之旅,帮你把离线特征批处理与回填这两项核心技能装进脑子里。

岗位关联

掌握离线特征批处理与回填,是特征平台与 MLOps 工程师的必修课——它决定模型能否稳定、可信地吃到每一口历史数据。

目录
  1. 可视化演示
  2. 核心概念
  3. 特征计算流水线
  4. 回填核心原理
  5. 调度依赖管理
  6. 一致性保障
  7. 质量监控治理
  8. MLOps 实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示离线特征平台从数据源(Src)→批处理(Batch)→特征存储(Store)→回填(Fill)→质量校验(QC)→在线服务(Online)的完整链路,含PIT时间对齐与分区调度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

特征平台批处理与回填流程 数据源(Src)经Spark批处理(Batch)写入特征存储(Store),回填(Fill)按T-7~T-1分区回溯历史特征 PIT时间对齐防泄漏,QC校验空值(Null)/计数(Cnt)/范围(Range),幂等(Idem)支持断点续跑 Src → Batch → Store → Fill → QC → Online

核心概念

把特征平台想成一座中央厨房:它不直接面对食客,而是把散装的米面粮油变成一盒盒半成品——洗好的菜、切好的肉丝、调好的酱汁。这些半成品就是“特征”:原始日志、用户行为、业务明细统统是生鲜原料,离线特征则是加工后能直接下锅(进模型)的标准件。

“批处理”对应厨房里雷打不动的晚班流程:每晚固定时间,团队按同一套标准作业程序把当天原料处理完,贴标签入库。它讲究固定节奏、批量吞吐、结果可复用。而“特征回填”是另一类动作:当特征逻辑升级或模型需要更长历史样本时,为过去某段时间重新计算特征并覆盖旧结果。一个管今天,一个管历史。

从数学上看,离线特征本质上是把原始数据映射成一个向量:

一句话记住:批处理是每晚的例行备菜,回填是给老菜谱补上新酱料的记录。理解这两个动作,你就拿到了打开整座冷库的钥匙。

f(raw)=[ f1,  f2,  …,  fD ]⊤\displaystyle f(\text{raw}) = \left[\, f_1,\; f_2,\; \dots,\; f_D \,\right]^{\top}
特征向量就是“一排保鲜盒”,每一格装一类加工后的半成品。
  1. 特征映射f(raw) 表示对原始数据施加特征计算逻辑,相当于“把生鲜原料变成半成品”这个动作本身。
    f(raw)f(\text{raw})
  2. 特征向量方括号内排列 f1 到 fD 共 D 个特征,对应冷库里一排贴好标签的保鲜盒。
    [ f1,  f2,  …,  fD ]⊤\left[\, f_1,\; f_2,\; \dots,\; f_D \,\right]^{\top}

特征计算流水线

备菜是流水线:采购、摘洗、切配、腌制、装盒、入库。离线特征同样环环相扣——数据源接入是第一道工序,计算逻辑是灶台上的菜谱,结果落库是保鲜盒进冷库,调度触发则是唤醒整条线的闹钟。

数据源接入对应“采购”:从数据仓库抽取用户行为日志、订单表等原始数据并清洗去重。计算逻辑对应“菜谱”:把原始字段加工成有意义的特征,例如“过去 7 天用户下单总金额”,需要指定窗口和聚合函数。结果落库对应“装盒”:按日期和实体 ID 组织好特征并写入特征表。

最常用的批处理特征之一是滑动窗口聚合。给定窗口宽度 W,第 t 天的第 k 个特征定义为窗口内原始值的均值:

流水线每一环都影响成品。采购漏货(数据缺失)、菜谱写错(逻辑 Bug)、装盒没贴日期(时间戳缺失),冷库就多一盒废料。按流水线严格出餐,是离线批处理的基本功。

featuret,k=1W∑i=t−W+1txi,k\displaystyle \text{feature}_{t,k}=\frac{1}{W}\sum_{i=t-W+1}^{t} x_{i,k}
把过去 W 天的原始值取平均,作为第 t 天的特征,就像炖一锅汤用七天的食材平均提味。
  1. 特征值feature_{t,k} 是第 t 天的第 k 个特征,相当于“这道菜成品重量”。
    featuret,k\text{feature}_{t,k}
  2. 累加求和把窗口内每天的原始字段值加总,像厨师把七天配料逐一过秤。
    ∑i=t−W+1txi,k\sum_{i=t-W+1}^{t} x_{i,k}
  3. 窗口宽度W 是窗口天数,窗口越大越平滑,但反应越慢。
    WW
  4. 均值归一除以 W 得到平均用量,避免累计总量随时间虚高。
    1W∑i=t−W+1txi,k\frac{1}{W}\sum_{i=t-W+1}^{t} x_{i,k}

回填核心原理

这一天,主厨研发出新酱料。为了让老顾客也尝到新口味,最直接的办法是给过去三个月的每桌菜都补一份“若用了新酱料会怎样”的记录。后厨管这叫回锅重做——在 AI 世界里,这叫特征回填。

回填的本质是:用新的特征计算逻辑,对历史时间窗口内每一天重新计算特征,覆盖或扩展现有结果。它常用于模型重训、特征逻辑升级、审计取数等场景。但回填不是把批处理原样重跑一遍——它必须尊重历史边界,不偷看未来数据。

假设今天是 t_today,需要回填最近 N 天,回填范围是:

回填还要保证三件事:数据对齐——特征与训练标签同一时间语义;幂等——同范围重跑 N 次结果一致;版本管理——记录特征逻辑版本便于追溯。回填像补菜谱:知道哪几天要返工(窗口)、用什么火候(逻辑版本),而且不能拿明天的食材炒昨天的菜(防未来泄漏)。

Rangebackfill=[ ttoday−Ndays,  ttoday ]\displaystyle \text{Range}_{\text{backfill}} = \left[\, t_{\text{today}}-N_{\text{days}},\; t_{\text{today}} \,\right]
回填窗口是“今天往前数 N 天”的闭区间,窗口内每一天都要重算,但绝不能越“今天”的界。
  1. 回填范围Range_backfill 表示本次回填覆盖的全部日期,相当于“要返工的旧菜单清单”。
    Rangebackfill\text{Range}_{\text{backfill}}
  2. 起点t_today - N_days 是最早需要重算的那一天。
    ttoday−Ndayst_{\text{today}}-N_{\text{days}}
  3. 右端点t_today 是截止时刻,回填不过未来。
    ttodayt_{\text{today}}

调度依赖管理

中央厨房最怕乱:烤箱还在预热,切菜师傅已经把肉下锅了。要想出餐节奏稳定,得有排班表和传菜铃——在特征平台里分别对应定时调度和依赖编排。

离线批处理通常由调度系统统一驱动:凌晨 1 点数据同步完成,2 点启动特征计算,3 点特征落库,4 点下游训练任务开跑。任何一环晚了,整条链顺延——这就是依赖管理的意义。调度系统必须具备三个能力:定时触发、依赖编排、重试容错,同时要有状态追踪面板。

用公式表示“上游完成才能启动下游”的约束:

依赖关系要谨慎设计:环形依赖会让调度死锁,扇入过大会让单个任务成为瓶颈。没有排班表的厨房等菜等到天亮;没有依赖管理的特征管道,数据也等不到天亮。

Tjready=max⁡i∈parent(j)(Tidone)+δ\displaystyle T^{\text{ready}}_{j} = \max_{i \in \text{parent}(j)} \left( T^{\text{done}}_{i} \right) + \delta
任务 j 的就绪时间 = 所有上游任务完成时间的最大值,再留一段缓冲间隔。
  1. 就绪时间T_j^{ready} 是任务 j 最早可开始运行的时刻。
    TjreadyT^{\text{ready}}_{j}
  2. 取最大值遍历所有上游任务,取完成时间中最晚的一个,这是“等最慢的厨师切完菜才上灶”。
    max⁡i∈parent(j)(Tidone)\max_{i \in \text{parent}(j)} \left( T^{\text{done}}_{i} \right)
  3. 缓冲间隔δ 是预留的安全余量,防止时钟误差或资源竞争导致撞车。
    δ\delta

一致性保障

同一道菜,堂食和后厨试菜必须一个味道,否则客人投诉。同理,在线推理时实时计算的特征,必须和离线训练时算好的特征保持一致——这就是特征一致性。

不一致的根源常在于时间边界:离线特征全量归一化时偷看了未来,或在线与离线用了不同统计口径。训练时是老虎,上线变绵羊,模型效果大打折扣。工程上常用的保障手段:双写策略、时间戳对齐、版本管理,再加上抽样比对。

用公式监控一致性:

让堂食和外卖一个味儿,靠的不是运气,是双写、对齐、版本、抽查四道保险。一致性达标,模型上线才敢拍胸脯。

consistency=1−∣ fonline(x)−foffline(x) ∣∣ foffline(x) ∣\displaystyle \text{consistency} = 1 - \frac{\left|\, f_{\text{online}}(x) - f_{\text{offline}}(x) \,\right|}{\left|\, f_{\text{offline}}(x) \,\right|}
线上与离线特征值越接近,一致性越接近 100%,就像品菜师闭眼尝不出堂食与外卖的区别。
  1. 绝对差|f_online(x) - f_offline(x)| 是两次计算的偏差,像两锅汤的咸度差。
    ∣ fonline(x)−foffline(x) ∣\left|\, f_{\text{online}}(x) - f_{\text{offline}}(x) \,\right|
  2. 归一化除以 |f_offline(x)| 得到相对误差,使不同量纲的特征可横向比较。
    ∣ fonline(x)−foffline(x) ∣∣ foffline(x) ∣\frac{\left|\, f_{\text{online}}(x) - f_{\text{offline}}(x) \,\right|}{\left|\, f_{\text{offline}}(x) \,\right|}
  3. 一致率1 减去相对误差,越接近 1 越可信。
    1−∣ fonline(x)−foffline(x) ∣∣ foffline(x) ∣1 - \frac{\left|\, f_{\text{online}}(x) - f_{\text{offline}}(x) \,\right|}{\left|\, f_{\text{offline}}(x) \,\right|}

质量监控治理

再熟练的厨房也会偶尔失手:盐放多了、菜洗不净、冰箱断电。要守住口碑,每天得安排品控试吃。特征平台的质量监控就是这位品控官。

离线批处理与回填跑完后,不能只看任务是否成功,还要监控特征质量:数据有没有缺失、分布有没有漂移、产出有没有延迟、异常有没有告警。数据完整性靠行数、空值率、主键唯一性把关;分布漂移常用 PSI 指标度量。

PSI 的计算公式:

品控官天天试吃,不是找茬,而是让问题在顾客发火前暴露。用完整性和 PSI 守住特征可信底线,是批处理管道的最后一道闸门。

PSI=∑i=1n(pi−qi)⋅ln⁡piqi\displaystyle \text{PSI} = \sum_{i=1}^{n} (p_i - q_i) \cdot \ln\frac{p_i}{q_i}
PSI 比较当前窗口与基准窗口的特征分布差异,通常超过 0.25 视为明显漂移,相当于品控尝出味道大不一样。
  1. 分箱占比p_i 与 q_i 分别表示特征在当前窗口和基准窗口第 i 个分箱中的样本占比。
    pi,  qip_i,\; q_i
  2. 概率差(p_i - q_i) 是两分布在该分箱上的概率差值。
    pi−qip_i - q_i
  3. 对数加权ln(p_i/q_i) 放大大幅偏离的分箱,漂移越大贡献越大。
    ln⁡piqi\ln\frac{p_i}{q_i}
  4. 求和对所有分箱累加得到总漂移分数。
    ∑i=1n(pi−qi)⋅ln⁡piqi\sum_{i=1}^{n} (p_i - q_i) \cdot \ln\frac{p_i}{q_i}

MLOps 实践

连锁店想开得长久,得把后厨经验写成手册:什么菜上线、什么菜下架、酱料配方谁来改、改完怎么同步。在 MLOps 语境下,这些就是特征平台的治理规范。

MLOps 关注模型从开发到生产全生命周期的可信可运维。落到离线特征管线上,重点是:特征上线下线要有审批和回滚通道;特征变更(含回填)要与模型重训联动;数据资产要有目录和责任人。实践上常见做法包括上线前历史回填评估、下线前通知消费方并设观察期、回填任务与训练样本生成版本绑定。

回填的工程成本可以估算:

手册写好了,换十个厨师也能做出统一味道。治理规范建起来,换十位工程师,特征平台也能稳定产出可信数据——这是 MLOps 的终极目标。

Ctotal=Ddays×SdailyPparallel×λthroughput\displaystyle C_{\text{total}} = \frac{D_{\text{days}} \times S_{\text{daily}}}{P_{\text{parallel}} \times \lambda_{\text{throughput}}}
回填总耗时 = 回填天数 × 每日数据量 ÷ (并行度 × 单任务吞吐),用来评估要不要分批次回填。
  1. 数据总量D_days × S_daily 是回填涉及的总数据规模,像“30 天的食材量”。
    Ddays×SdailyD_{\text{days}} \times S_{\text{daily}}
  2. 处理能力P_parallel × λ_throughput 是并行度和单任务吞吐的乘积,等于“灶台数量 × 每口锅出菜速度”。
    Pparallel×λthroughputP_{\text{parallel}} \times \lambda_{\text{throughput}}
  3. 总耗时总量除以能力,得到回填大致耗时,用于判断是否需要扩容或分批。
    Ddays×SdailyPparallel×λthroughput\frac{D_{\text{days}} \times S_{\text{daily}}}{P_{\text{parallel}} \times \lambda_{\text{throughput}}}

AI 应用场景

金融风控的每日授信特征批处理

阶段:离线特征工程

解决的问题:传统风控团队每天从几十张表手工写 SQL 抽特征,脚本散落、口径不一,特征上线慢且易出错。AI 化后由特征平台统一管理,批处理管道每天定时产出可靠特征,供在线风控模型读取。

具体案例:某银行搭建特征平台,每日凌晨由调度系统触发批处理,从交易流水和行为日志计算 200 多个特征并写入特征存储;白天信贷申请实时读取特征,授信评估从“天级”降到“秒级”,特征口径也得到统一。

推荐系统的特征回填与模型重训

阶段:特征回填与样本生成

解决的问题:推荐算法升级后新增“用户内容互动深度”特征,但历史 30 天样本里没有这个特征,旧样本无法用于新模型训练。回填逻辑可以补齐历史特征,让重训样本与线上特征对齐。

具体案例:某内容社区团队对新特征回填 30 天,并重新生成训练样本。回填过程严格保证不偷看未来数据,重训后的 CTR 模型 AUC 提升 2.1%,且线上与离线一致率保持在 99% 以上。

MLOps 数据可信治理巡检

阶段:数据质量监控

解决的问题:线上特征可能因日志字段改版被悄悄污染,模型效果缓慢下滑却难定位。通过离线批处理管道的质量监控,可以第一时间发现漂移并回滚。

具体案例:某电商 MLOps 团队每日对核心特征做在线离线一致性抽样和 PSI 漂移检测。某天发现“加购转化率”特征一致率骤降至 92%,P0 告警触发,团队随即回滚特征版本,避免了更大损失。

Python 演示

python68 行
"""离线特征批处理与回填模拟"""from datetime import date, timedelta  def date_range(start, end):    days = []    cur = start    while cur <= end:        days.append(cur)        cur += timedelta(days=1)    return days  class OfflineFeaturePipeline:    def __init__(self):        self.raw_store = {}        self.feature_store = {}     def load_raw(self, day, records):        self.raw_store[day] = records     def _compute_one(self, day, window):        start = day - timedelta(days=window - 1)        ordered = date_range(start, day)        valid = [self.raw_store.get(d, []) for d in ordered]        total = sum(sum(item) for item in valid)        count = sum(len(item) for item in valid)        return total / count if count else 0.0     def batch_run(self, day, window=7):        self.feature_store[day] = self._compute_one(day, window)        return self.feature_store[day]     def backfill(self, start, end, window=7):        results = {}        for day in date_range(start, end):            results[day] = self._compute_one(day, window)            self.feature_store[day] = results[day]        return results     def consistency_check(self, online_feats):        mismatches = []        for day, offline_val in self.feature_store.items():            online_val = online_feats.get(day)            if online_val is None:                continue            diff = abs(online_val - offline_val)            if diff > 1e-6:                mismatches.append((day, online_val, offline_val, diff))        return mismatches  if __name__ == "__main__":    pipe = OfflineFeaturePipeline()    start = date(2024, 1, 1)    for i in range(30):        day = start + timedelta(days=i)        pipe.load_raw(day, [10 + i, 12 + i, 8 + i])    for i in range(30):        day = start + timedelta(days=i)        pipe.batch_run(day)    pipe.backfill(start, start + timedelta(days=6), window=3)    online_feats = {day: val + 0.1                    for day, val in pipe.feature_store.items()}    bad = pipe.consistency_check(online_feats)    print("不一致天数:", len(bad))    for row in bad[:3]:        print(row)
目的:用一个 30 天的模拟管道演示每日批处理、历史回填和一致性校验的完整流程。
  1. def date_range(start, end):生成连续日期序列,相当于把“要返工的日子”逐天列出来。
  2. self.raw_store[day] = records按天存放原始数据,对应中央厨房每日采购清单。
  3. def _compute_one(self, day, window):用宽度为 window 的滑动窗口计算单日特征值。
  4. self.raw_store.get(d, [])窗口内某天没数据就当作空列表,防止 KeyError。
  5. def batch_run(self, day, window=7):执行每日批处理:算当天的特征并写入特征存储。
  6. def backfill(self, start, end, window=7):对 [start, end] 区间逐天回填特征,覆盖旧值。
  7. def consistency_check(self, online_feats):抽样比对线上线下特征,返回不一致记录。
  8. pipe.batch_run(day)依次跑完 30 天每日批处理,模拟排班节奏。

常见误区

误区“回填不就是把批处理脚本对历史数据各跑一次吗?我把脚本对过去 30 天每天执行一遍,不就完事了?”

正解批处理面向“今天”,回填面向“历史区间”,两者要处理的边界完全不同。回填要明确时间窗口、锁定特征逻辑版本,并防止未来信息泄漏——例如算第 t 天的滑动均值,只能用到第 t 天为止的原始数据,而普通批处理脚本可能默认读取最新全量数据,直接重跑就“开了天眼”。回填还必须幂等,重复执行多次结果要一致,否则下游模型拿到的是不确定的数。

为何常见:初学者看到两者都“跑一遍计算逻辑”,容易忽略时间窗口和数据版本这些历史维度的约束。

误区“只要计算逻辑写一样,在线特征和离线特征就应该一个字节都不差,差了就是系统出了问题。”

正解因为数据源、计算时点和统计窗口可能存在细微差别,在线和离线特征有微小偏差是正常的,工程上通常只要求一致率超过 99%。真正要杜绝的是系统性偏差,比如离线归一化偷看了未来、在线服务漏了刚写入的数据。如果追求绝对相等,往往需要付出极高的延迟和存储代价,却换不来额外收益。

为何常见:“同样的菜谱、同样的材料就该出同样的菜”的直觉忽略了火候(计算时点)和食材新鲜度(数据时序)的影响。

误区“多回填几年历史数据,让模型吃得饱饱的,效果一定更好。”

正解回填窗口过长会带来两个问题:一是计算与存储成本高企,二是早期业务分布与当前可能早已不同,回填出的特征会和在线分布严重错位,反而拉低模型效果。一般只回填与训练窗口匹配的时长;需要更长历史时,先用 PSI 评估分布漂移,再做分阶段回填。

为何常见:“数据越多模型越强”的流行印象让人忽略了分布漂移和工程成本。

误区“定时任务挂了?把同一个任务再点一次,反正结果肯定一样,不用多想。”

正解重跑前要检查三件事:失败时是否已产出部分数据、下游任务是否消费了这些数据、数据源是否在失败期间发生了变化。盲目重跑很可能用新数据覆盖好数据,或把部分脏数据扩散到下游。生产环境应保证任务幂等,并采用事务性写入:先清理失败分区,再重跑,最后校验产出再放行。

为何常见:本地脚本重跑成本低、无副作用,让开发者误以为生产管道重跑也一定安全。

误区“先把特征算出来,让模型跑起来,监控这种治理活儿等正式上线后有时间再说。”

正解没有监控的批处理管道就像没有品控的厨房,一次数据事故可能让线上模型悄悄变质,而排查成本远超提前加监控的成本。应从第一天就集成行数、空值率、延迟、PSI 等基础监控;随着业务发展再逐步增加一致性抽样、漂移告警等高级能力。

为何常见:业务节奏紧张时,人们习惯“先跑起来再治理”,直到真的出了事故才追悔莫及。

面试题

Q1. 离线特征批处理的核心特征是什么?

单选题 · easy

  • A.实时计算并处理流式数据
  • B.按固定周期批量计算并落库← 正确答案
  • C.由用户手工逐条计算特征
  • D.在线请求时动态生成特征

答案:B。批处理的核心是“固定节奏 + 批量吞吐 + 结果落库”,对应中央厨房每晚统一备菜。A 是实时流计算,C 是手工流程,D 是在线特征,都不符合“离线批处理”的定义。

Q2. 特征回填的主要目的是什么?

单选题 · easy

  • A.提升批处理任务执行速度
  • B.为历史时间窗口补齐特征数据← 正确答案
  • C.清理过期无用的历史特征
  • D.扩容在线特征存储空间

答案:B。回填语义上就是“为过去补配方”,用新逻辑重算历史窗口的特征并写回,供模型重训或审计使用。A/C/D 分别是性能优化、数据清理和容量管理,与回填目的无关。

Q3. 回填计算中“不偷看未来”指的是什么?

单选题 · mid

  • A.禁止使用未来时刻的标签数据
  • B.算某天特征时只用到当天为止的数据← 正确答案
  • C.特征逻辑不能使用最新版本
  • D.回填任务不能访问线上环境

答案:B。时间泄漏是回填最常见的坑。算第 t 天的滑动均值时,只能用第 t 天及之前的数据;如果用整段历史的全局均值,就相当于拿着明天的食材炒昨天的菜,训练评估会虚高。A 属于标签泄漏,C 是版本问题,D 是环境隔离问题。

Q4. 判断回填任务是否幂等的标准是什么?

单选题 · easy

  • A.重复执行多次结果完全一致← 正确答案
  • B.任务执行时间足够短
  • C.执行过程中不占用额外内存
  • D.一次执行不影响其他任务

答案:A。幂等指“同一道菜做三遍,味道完全一样”。回填若不确定幂等,失败重跑时可能把好数据覆盖成坏数据。执行时间、内存占用、任务隔离都与幂等性无关。

Q5. 在线离线特征一致性校验中最常用的方式是哪种?

单选题 · mid

  • A.抽样比对线上与线下的特征数值← 正确答案
  • B.直接比较两特征的存储内存地址
  • C.查看批处理任务的历史日志
  • D.人工逐条复核全量历史数据

答案:A。一致性校验通常在生产环境抽样,计算线上实时特征与离线特征的一致性率。内存地址只是进程内概念,日志无法反映数值偏差,全量人工复核成本不可接受,只有抽样比对方便工程化。

Q6. 某特征回填窗口为 30 天,现在数据源临时补录了第 25 天的数据,最佳做法是什么?

单选题 · hard

  • A.只重算第 25 天这一天的特征
  • B.整个 30 天窗口全部重算
  • C.从第 25 天起重算至窗口最新一天← 正确答案
  • D.不重算,直接忽略新增数据

答案:C。滑动窗口特征会受前后 W 天影响:第 25 天的数据变了,第 25 天到第 25+W-1 天的特征都会变。所以应从第 25 天起顺延重算受影响区间。A 漏了后续依赖,B 是全量返工成本高,D 则导致特征不一致。

Q7. 离线特征批处理管道通常包含哪些环节?

多选题 · mid

  • A.数据源接入与清洗← 正确答案
  • B.特征计算与结果落库← 正确答案
  • C.在线实时模型推理
  • D.调度与依赖管理← 正确答案

答案:ABD。批处理管道四个典型环节:接入清洗、特征计算、结果落库、调度依赖,对应备菜的采购、切配、装盒、排班。在线实时推理属于另一条链路,不在离线批处理范围内。

Q8. 特征回填前需要检查哪些前置条件?

多选题 · mid

  • A.原始数据是否完整← 正确答案
  • B.特征逻辑版本是否锁定← 正确答案
  • C.在线服务是否完成重启
  • D.目标存储空间是否充足← 正确答案

答案:ABD。回填前要确认“原料齐、配方定、冰箱有位置”——数据完整、版本锁定、存储充足。在线服务重启与回填本身没有直接关系,回填先入库,线上服务是否重启不影响这批历史数据的计算。

Q9. 关于离线批处理与回填,下列哪个说法是正确的?

单选题 · hard

  • A.批处理和回填的调度方式完全相同
  • B.回填需要时间戳对齐,批处理不需要
  • C.批处理面向当前增量,回填面向历史区间← 正确答案
  • D.回填不会影响在线特征版本

答案:C。批处理通常按天对增量数据计算入库,回填则是对历史区间批量重算。A 错在两者调度触发典型场景不同;B 错在批处理也要保证时间语义;D 错在回填写库后可能影响后续读取的线上特征版本。

Q10. 特征平台中保障数据可信的常用手段有哪些?

多选题 · hard

  • A.实时监控特征分布漂移← 正确答案
  • B.统一特征版本管理← 正确答案
  • C.全量数据人工逐条核对
  • D.在线离线一致性抽样校验← 正确答案

答案:ABD。可信保障靠四道保险:分布监控、版本管理、一致性抽样、异常告警。C 全量人工核对在规模生产下不可行,且人工容易出错;A/B/D 都是工程上可落地的可信手段。