
1) 【一句话结论】设计一个以流式处理为核心的实时数据仓库,采用星型模型为主,通过实时ETL(如Flink)采集交易数据,结合列式存储和索引优化查询性能,满足成交额、换手率等指标的实时分析需求。
2) 【原理/概念讲解】
实时数据仓库的核心是“实时性”,区别于传统数仓的批量处理(如每日凌晨加载)。数据采集需适配高频流数据(如交易系统每秒数千笔数据),因此采用流式采集(如Kafka消息队列),将数据实时推送到处理层。
ETL流程分为“实时ETL”和“加载”两步:实时ETL(如Flink)负责数据清洗(过滤无效数据)、转换(计算换手率=成交量/总股本)、格式化,先写入中间层(如HDFS或Kafka);再通过批量加载工具(如Sqoop)将数据加载到数据仓库。
数据模型方面,星型模型是经典选择:由“事实表”(核心业务数据,如交易事实表,包含交易ID、成交额、时间戳等)和“维度表”(描述事实的维度,如股票维度表、时间维度表)组成,结构简单,查询效率高;雪花模型是星型的扩展(维度表进一步拆分),适合维度复杂但查询简单的情况。
查询性能优化需从存储和索引入手:使用列式存储(如Parquet)减少I/O(只读取查询需要的列);对事实表按时间戳、股票代码创建索引;针对高频查询(如按日聚合成交额),生成预聚合表,减少实时查询的计算量。
3) 【对比与适用场景】
| 模型类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 星型模型 | 事实表+维度表(无嵌套) | 维度少,结构简单,查询效率高 | 交易数据(成交额、换手率)分析,维度较少 | 维度扩展需重新建模 |
| 雪花模型 | 星型维度表进一步拆分 | 维度多,结构复杂,查询可能冗余 | 维度复杂(如多级市场、多级时间)分析 | 查询性能稍低,维护复杂 |
4) 【示例】
5) 【面试口播版答案】
面试官您好,针对实时交易数据分析,我设计如下方案:首先,数据采集采用流式架构,用Kafka接收交易系统推送的实时数据流,确保低延迟。然后,ETL流程用Flink处理,完成数据清洗、计算(如换手率)后,先写入中间层,再加载到数据仓库。数据模型采用星型模型,事实表存储核心交易数据(成交额、成交量),维度表包括股票和时间维度,结构清晰,查询效率高。查询性能优化方面,使用列式存储(如Parquet)减少I/O,对事实表按时间戳创建索引,并按日预聚合生成预聚合表,提升常用查询速度。这样能实现成交额、换手率的实时分析,满足业务需求。
6) 【追问清单】
7) 【常见坑/雷区】