
1) 【一句话结论】
采用分阶段ETL流程,结合增量抽取(基于时间戳或CDC技术)与业务规则清洗,通过源系统ID到统一ID的映射表及中间表校验,确保多源数据在主键、时间等维度的一致性,最终将学习行为、用户、课程信息加载至数据仓库,支撑分析需求。
2) 【原理/概念讲解】
数据仓库的ETL流程结合星型模型设计(事实表与维度表区分),分为抽取、转换、加载三阶段:
3) 【对比与适用场景】
| 方案类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 全量抽取 | 每次抽取时,从源系统获取所有数据 | 需完整数据,处理时间长,资源占用多 | 数据量小、变化慢的场景(如静态课程信息) | 需定期全量,效率低 |
| 增量抽取 | 仅抽取自上次抽取以来新增/变更的数据 | 处理时间短,资源占用少,实时性高 | 大数据量、高频变化的数据(如学习行为日志) | 需维护增量标识(时间戳、CDC),确保无遗漏 |
| 规则清洗 | 基于预定义规则(正则、校验函数)处理数据 | 逻辑明确,易于实现,适用于结构化数据 | 用户信息(手机号格式)、课程信息(价格范围) | 规则需定期更新,避免遗漏异常 |
| 机器学习清洗 | 基于模型(异常检测、聚类)识别并处理数据 | 自动化程度高,适用于复杂、非结构化数据 | 学习行为日志(异常点击、无效操作) | 模型训练成本高,需持续维护 |
4) 【示例】
伪代码示例(Python+SQL,展示核心步骤):
# 1. 抽取步骤:从不同源获取数据,记录上次抽取时间
def extract_data():
behavior = fetch_from_online_platform("behavior_log", last_extract_time)
user = fetch_from_peiyousystem("user_info", last_extract_time)
course = fetch_from_futurecenter("course_info", last_extract_time)
return behavior, user, course
# 2. 转换步骤:数据清洗与一致性校验
def transform_data(behavior, user, course):
# a. 主键映射:源系统ID到统一ID(维护机制:定期同步源系统元数据)
user = map_source_id_to_unified_id(user, "user_id", "source_id_map")
behavior = map_source_id_to_unified_id(behavior, "user_id", "source_id_map")
# b. 增量过滤:仅处理新增或变更数据(基于时间戳)
behavior = filter_incremental(behavior, last_extract_time, "create_time")
# c. 数据清洗:用户信息去重、格式标准化(业务规则案例)
user = deduplicate_user(user, "unified_user_id")
user = standardize_user_id_format(user, "phone_number", r'^1[3-9]\d{9}$')
# d. 数据一致性校验:用户ID在行为日志中是否存在(避免孤立用户)
behavior = validate_user_id(behavior, user)
# e. 关联数据:将行为与用户、课程信息关联(星型模型拆分)
merged = join_behavior_with_user_course(behavior, user, course)
return merged
# 3. 加载步骤:写入数据仓库
def load_data(merged):
insert_into_datawarehouse(merged) # 插入事实表(学习行为表)
insert_into_dim_tables(merged) # 插入维度表(用户、课程、时间)
update_last_extract_time() # 更新抽取时间戳
5) 【面试口播版答案】
各位面试官好,针对好未来数据仓库的ETL设计,我的思路是采用分阶段流程,结合增量抽取与数据清洗,通过主键映射和校验确保多源数据一致性。首先,抽取阶段,从在线平台(学习行为日志)、培优系统(用户信息)、未来中心(课程信息)获取数据,记录上次抽取的时间戳。然后,转换阶段,先做数据清洗:比如用户信息去重(按统一ID),格式标准化(如手机号统一为11位数字);再校验数据一致性,比如用户ID在行为日志中是否存在,时间戳是否合理。接着,增量抽取,根据行为日志的时间戳,只处理新增或变更的数据,避免全量抽取的效率问题。最后,加载,将处理后的数据写入数据仓库的事实表(如学习行为表)和维度表(用户、课程、时间),并更新抽取时间戳。关键点在于通过源系统ID到统一ID的映射表(维护机制:定期同步源系统元数据),以及中间表暂存数据,逐步校验,确保数据质量,同时优化性能,比如使用CDC技术(如Debezium)捕获变更数据。
6) 【追问清单】
7) 【常见坑/雷区】