
1) 【一句话结论】
数据湖是存储原始/半结构化数据的“原材料仓库”,数据仓库是结构化、已清洗的“加工食材库”;AI项目中需结合两者,数据湖用于原始数据采集与预处理,数据仓库用于高质量特征工程后的模型训练数据。
2) 【原理/概念讲解】
数据湖(Data Lake):类似“水库”,以原始、半结构化(如JSON、日志、图片)或结构化数据(如CSV)形式存储,不预先定义数据模式,通过HDFS、S3等存储,适合灵活的数据探索、机器学习原始数据采集。类比:超市的“生鲜区”,存放未加工的食材,可按需加工。
数据仓库(Data Warehouse):类似“厨房”,数据经过清洗、转换、建模(如ETL/ELT流程),形成结构化、主题化的数据集(如星型模型的事实表+维度表),预先定义模式,适合分析查询、报表、BI及AI模型训练。类比:厨房的“备餐区”,食材已清洗、切配,可直接烹饪。
3) 【对比与适用场景】
| 对比维度 | 数据湖 | 数据仓库 |
|---|---|---|
| 定义 | 存储原始/半结构化数据的平台 | 面向分析的集成数据环境 |
| 特性 | 无模式,可扩展,存储成本高 | 有模式,结构化,ETL成本高 |
| 使用场景 | 原始数据采集、机器学习原始数据、数据探索 | 报表、BI分析、AI模型训练(高质量特征) |
| 注意点 | 需数据治理(如数据质量、安全) | 需定期更新(如数据刷新) |
4) 【示例】
假设公司用户行为日志(JSON格式)存储在数据湖(HDFS),AI项目需训练用户画像模型:
# 使用Spark读取数据湖中的日志文件
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("DataLakeExample").getOrCreate()
raw_data = spark.read.json("hdfs://path/to/user_logs/*.json")
# 示例:过滤无效数据、转换时间字段、生成用户活跃度特征
clean_data = raw_data.filter("user_id is not null") \
.withColumn("event_time", spark.sql("from_unixtime(event_timestamp/1000)")) \
.groupBy("user_id") \
.agg({"event_time": "count"}).withColumnRenamed("count(event_time)", "active_days")
-- 假设数据仓库是MySQL,事实表为user_activity_fact
INSERT INTO user_activity_fact (user_id, active_days, load_date)
VALUES (?,?,now())
5) 【面试口播版答案】
“面试官您好,数据湖和数据仓库的核心区别在于存储的数据形态和结构化程度。数据湖是类似“原材料仓库”的存储,存储原始、半结构化数据,不预先定义模式,适合灵活的数据探索和机器学习原始数据采集;数据仓库则是类似“加工好的食材”的集成环境,数据经过清洗、转换、建模,结构化,适合分析查询。在AI项目中结合两者的全流程通常是:首先从业务系统采集原始数据存入数据湖,然后通过ETL/ELT流程(比如用Spark)从数据湖读取数据,进行清洗、特征工程(如处理缺失值、转换格式、生成特征),然后将处理后的高质量特征数据加载到数据仓库的模型训练表;最后从数据仓库读取训练数据用于模型训练。这样既利用数据湖的灵活性和低成本存储原始数据,又通过数据仓库提供结构化、高质量的数据支持AI模型的训练。”
6) 【追问清单】
7) 【常见坑/雷区】