
1) 【一句话结论】:交通银行数据仓库采用星型模型结合ODS-DWD-DWS-ADS分层架构,通过流处理(如Flink)处理实时支付数据,借助CDC、事务ID等机制保障数据一致性与时效性,支撑业务分析决策。
2) 【原理/概念讲解】:数据模型上,星型模型以事实表为中心,维度表环绕,适合分析型查询(类比超市“商品-销售-时间”关系,事实表是销售记录,维度表是商品、时间、客户,查询“某商品某时间段销售额”直接关联事实表和维度表,效率高)。雪花模型是星型模型的规范化,维度表进一步拆分,减少冗余但查询性能稍低(适合维度复杂且需规范化的场景,如客户关系管理)。
数据分层:
3) 【对比与适用场景】:
| 对比项 | 星型模型 | 雪花模型 | 数据分层(ODS/DWD/DWS/ADS) |
|---|---|---|---|
| 定义 | 以事实表为中心,维度表直接关联 | 星型模型的规范化,维度表多级关联 | ODS:原始数据存储;DWD:清洗整合;DWS:聚合汇总;ADS:应用服务 |
| 特性 | 数据冗余高,查询效率高 | 数据冗余低,查询性能稍低 | ODS:原始、未清洗;DWD:标准化主题;DWS:分析指标;ADS:业务应用 |
| 使用场景 | 业务分析需求明确,维度少,查询频繁(如支付、销售分析) | 维度复杂,需规范化,查询性能要求不高(如客户关系管理) | ODS:存储源数据;DWD:清洗后标准;DWS:聚合后指标;ADS:BI报表 |
| 注意点 | 维度表可能过大 | 查询需多表连接,性能可能下降 | ODS:原始数据;DWD:清洗后标准;DWS:聚合后指标;ADS:应用数据 |
4) 【示例】:
支付交易数据处理流程(伪代码):
from flink import StreamExecutionEnvironment, KafkaSource
env = StreamExecutionEnvironment.get_execution_environment()
source = KafkaSource(
topic="payment_logs",
bootstrap_servers="kafka:9092",
value_type=str,
deserialization_format="json"
)
def process_payment(record):
if record["status"] == "success":
user_name = get_user_name(record["user_id"])
merchant_name = get_merchant_name(record["merchant_id"])
return {
"transaction_id": record["transaction_id"],
"timestamp": record["timestamp"],
"merchant_id": record["merchant_id"],
"merchant_name": merchant_name,
"user_id": record["user_id"],
"user_name": user_name,
"amount": float(record["amount"]),
"status": "success"
}
data_stream = source.connect().process().map(process_payment)
data_stream.write("dwd:payment_transactions", "json")
env.execute("Real-time Payment Processing")
5) 【面试口播版答案】:
面试官您好,交通银行的数据仓库设计,我会从数据模型、分层架构、实时数据处理以及数据一致性与时效性这几个方面解释。首先,数据模型上,我们采用星型模型,以事实表为中心,维度表环绕,比如支付交易事实表关联时间、商户、用户维度表,这样分析“某商户某月交易额”时,直接关联事实表和维度表,查询效率高。然后数据分层,分为ODS(原始数据层)、DWD(数据仓库层)、DWS(数据服务层)、ADS(应用服务层):ODS存储原始支付日志,保留所有原始字段;DWD对ODS清洗整合,去除无效记录,补全用户/商户信息,统一格式;DWS聚合生成分析指标,比如按日统计各商户交易量;ADS为BI报表提供数据。对于实时支付数据,通过**流处理技术(如Flink)**实时消费Kafka中的日志,处理后写入DWD,确保数据及时性。数据一致性和时效性方面,通过CDC捕获源系统变更,结合事务ID去重,确保只处理一次变更,同时定时任务和流处理结合,保证数据及时更新,比如支付系统提交事务后,CDC捕获变更,流处理写入DWD,最终一致。这样架构既能支持历史分析,又能处理实时业务,为决策提供支持。
6) 【追问清单】:
7) 【常见坑/雷区】: