别把数据中台做成“数据坟场”:聊聊企业数据中台架构的真实落地之路
别把数据中台做成“数据坟场”:聊聊企业数据中台架构的真实落地之路
很多企业一提到 数据中台,第一反应就是:
“搞个大平台,把所有数据都扔进去。”
听起来挺宏大,但现实往往是——
三年之后,系统还在,数据一堆,但 没人敢用、没人会用、没人信。
我这些年在企业里看过不少数据平台项目,很多失败案例其实都不是技术问题,而是 架构、治理和团队协作的问题。
今天咱就不讲虚的,聊聊企业数据中台真正能落地的一套思路:
分层架构 + 数据治理 + 团队协作机制。
说白了就一句话:
让数据能生产、能管理、还能被人放心用。
一、先搞清楚:数据中台不是“数据仓库2.0”
很多公司做数据中台,第一步就错了。
他们觉得:
数据中台 = 大数据平台
于是架构长这样:
业务系统 → Kafka → Hadoop → Hive → BI
这其实只是 数据管道,不是数据中台。
真正的数据中台,是 可复用的数据资产平台。
换句话说:
不是存数据,而是生产数据资产。
一个比较成熟的数据中台,通常会做 分层建模。
二、数据中台的核心:分层架构
行业里比较成熟的一套模型是:
ODS → DWD → DWS → ADS
很多人背得很熟,但没真正理解。
我用一句大白话解释:
| 层 | 作用 |
|---|---|
| ODS | 原始数据 |
| DWD | 清洗后的明细 |
| DWS | 汇总主题数据 |
| ADS | 业务应用数据 |
结构图大概是这样:
BI / AI / 应用
│
ADS
│
DWS
│
DWD
│
ODS
│
业务系统
我们看一段真实一点的 Spark ETL 示例。
ODS → DWD:数据清洗
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
spark = SparkSession.builder \
.appName("ods_to_dwd") \
.getOrCreate()
# 读取ODS层原始订单数据
ods_df = spark.read.parquet("/ods/order")
# 数据清洗
# 1. 去掉非法订单
# 2. 统一字段格式
dwd_df = ods_df.filter(col("order_status") != "INVALID") \
.withColumn("price", col("price").cast("double"))
# 写入DWD层
dwd_df.write.mode("overwrite").parquet("/dwd/order_detail")
这一层的目标其实很简单:
把脏数据变成可信数据。
DWD → DWS:主题汇总
比如我们做 用户消费主题表。
from pyspark.sql.functions import sum
dwd_order = spark.read.parquet("/dwd/order_detail")
user_summary = dwd_order.groupBy("user_id") \
.agg(sum("price").alias("total_spend"))
user_summary.write.mode("overwrite").parquet("/dws/user_spend")
这一步其实就是:
把 原子数据 → 业务指标
DWS → ADS:服务业务
比如 BI 报表。
SELECT
user_id,
total_spend
FROM dws_user_spend
WHERE total_spend > 10000
ADS 层通常会直接给:
- BI
- API
- AI模型
- 运营系统
三、很多数据中台失败,其实是“治理没做好”
很多公司数据中台上线之后,会遇到一个经典问题:
“同一个指标,三个部门算出来三个结果。”
这时候老板就会问:
“到底哪个是真的?”
这就是 数据治理没做好。
核心是三件事:
1 指标口径统一
比如 GMV。
有些部门算:
支付金额
有些算:
下单金额
有些算:
退款后金额
如果没有 指标平台,数据一定乱。
我们一般会做一个 指标配置中心。
例如:
metric_name: GMV
definition: paid_order_amount - refund_amount
owner: data_team
update_cycle: daily
所有 BI 查询都必须引用这个指标。
2 数据血缘
一个数据表出问题,必须知道:
是谁生产的 → 从哪来的 → 被谁用了
简单示例:
lineage = {
"ads_sales_report": ["dws_user_spend"],
"dws_user_spend": ["dwd_order_detail"],
"dwd_order_detail": ["ods_order"]
}
这样当 ODS 数据异常时,你可以快速定位影响。
3 数据质量监控
数据中台必须有 自动质量检测。
例如:
def check_null_rate(df, column):
total = df.count()
null_count = df.filter(df[column].isNull()).count()
rate = null_count / total
if rate > 0.05:
raise Exception("数据质量异常")
这一步非常关键。
因为 坏数据比没数据更危险。
四、数据中台真正难的,其实是团队协作
我见过最典型的一种情况:
数据团队辛辛苦苦建了一堆表。
业务同学一句话:
“我看不懂。”
于是他们继续用 Excel。
所以数据中台要成功,必须解决 团队协作模式。
比较好的方式是 数据产品化。
举个例子:
一个“用户画像数据产品”。
数据团队提供:
user_profile_api
代码示例:
def get_user_profile(user_id):
profile = spark.sql(f"""
SELECT
user_id,
total_spend,
last_order_time,
vip_level
FROM ads_user_profile
WHERE user_id = {user_id}
""")
return profile
业务系统只需要:
调用 API
而不是研究 Hive 表。
这就是 数据即服务(DaaS)。
五、我对数据中台的三个真实感受
做了这么多年数据平台,我有三个很真实的感受。
第一:数据中台不是技术项目
它其实是:
组织工程。
涉及:
- 数据团队
- 业务团队
- BI团队
- AI团队
没有协作机制,技术再好也没用。
第二:分层比工具更重要
很多人纠结:
Spark 还是 Flink
Hive 还是 Iceberg
其实更关键的是:
数据模型有没有设计好。
好的模型可以用十年。
第三:中台的终极目标是复用
如果每个需求都要重新写 SQL。
那说明:
中台没有沉淀数据资产。
真正好的中台应该是:
一次开发
多次复用
结尾:数据中台不是终点
很多企业把 数据中台当作目标。
但我觉得它只是一个阶段。
真正的目标是:
数据驱动的企业。
当有一天:
- 运营决策来自数据
- 产品优化依赖数据
- AI模型直接消费数据
- 点赞
- 收藏
- 关注作者
评论(0)