我们团队最近在评估一套新的数据分析平台,甲方爸爸上来就问:“我们就想统一管数据,到底是上数据仓库还是数据湖?别给我整虚的。”这个问题其实特别典型,也是很多刚接触大数据体系的朋友最纠结的地方。你不能简单回答“一个处理结构化数据、一个处理非结构化数据”就完事,因为真实的架构选型背后,牵扯到成本、时效、治理、团队能力甚至公司政治。今天我从架构理念、技术栈、实际应用场景这几个方面,把数据仓库和数据湖的区别掰开揉碎讲清楚,顺便聊聊现在大家常说的“湖仓一体”到底是个什么东西。这篇文章适合正在做技术选型的数据从业者,也适合刚入行想理清概念的同学,我会尽量用大白话和实际例子来表述。
我先说个结论:数据仓库和数据湖不是简单的二选一,更像是“精装房”和“毛坯仓库”的区别。数据仓库是把数据清洗、加工、建模成规规矩矩的结构化表,直接给报表和BI用;数据湖则是把原始数据一股脑堆进去,想清楚怎么用再说。但别以为数据湖就是低配版,很多场景下你根本离不开它。下面的内容,我会从它们的诞生背景开始,一层层把架构、技术、成本、场景全部过一遍。
1. 数据仓库和数据湖:两个时代的数据管理思路
1.1 数据仓库的诞生逻辑:从报表到决策
数据仓库这个概念提出来已经快四十年了,在Bill Inmon和Ralph Kimball那批人的理论框架下发展成熟。它的核心逻辑非常清晰:把多个业务系统的数据集中起来,经过ETL(抽取、转换、加载)处理后,按照主题域重新组织,形成一套一致的、历史可追溯的数据集合。为什么要这么做?因为早期企业的数据分散在ERP、CRM、财务系统里,各系统口径不一,领导要个跨部门的经营报表,IT得手工导数据再用Excel核对,效率极低。
数据仓库的价值在于“对齐口径”和“提升查询性能”。它在数据进入仓库之前就强制定义了数据结构,也就是所谓的“先有模式,后有数据”。比如你要统计销售额,那么在建模的时候就必须明确“销售额=订单金额-退款金额”,并且把这张事实表的字段类型、粒度、维度外键全部定好。这样后续所有报表和决策分析,用的都是同一套数字,不会出现业务部门和财务部门对不上账的尴尬。
我早期做项目的时候,数据仓库的构建基本都是“自上而下”的,先梳理业务过程,再设计三级范式模型,最后做主题域划分和汇总表。这种模式的优点是在管控严格的金融、电信行业特别适用,因为它保证了数据的准确性、一致性和安全合规。但缺点也很明显,业务调整一下,模型就要跟着改,响应速度跟不上现在敏捷迭代的节奏。
1.2 数据湖的崛起背景:数据资产化的新需求
数据湖的概念大概在2010年前后由Pentaho的创始人James Dixon提出,后来在Hadoop生态的推动下大火。它的核心思想是“先把所有数据保存下来,未来需要的时候再处理”。这里的数据,可以是结构化表、半结构化的JSON日志、非结构化的图片、视频、音频,甚至传感器数据。
为什么会有这样的需求?因为互联网时代,数据量爆炸,而且数据形态极其多样。举几个例子:用户点击流日志、App埋点事件、社交媒体文本、物联网设备传回的时序信号,这些数据在产生的那一刻,我们可能还不知道它们未来有什么分析价值。如果硬要等建模完成再存储,要么数据早就被覆盖,要么就是成本高到没法接受。数据湖给出的答案是:数据本身就是资产,先把它低成本保存下来,之后用数据目录和元数据管理来发现价值。
数据湖的架构理念是“Schema-On-Read”,也就是读时模式。数据存进去的时候不校验结构,等你分析的时候,再根据需求解析出相应的结构。这意味着你可以先拿数据,再慢慢想怎么用,并不要求数据在进入仓库前就规范化。这种思路确实灵活,但同时也埋下了一个大坑,就是如果不做好元数据管理和数据治理,数据湖很快就会退化成“数据沼泽”,数据放进去再想找出来用,得靠考古。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 架构理念的差异:从Schema-On-Write到Schema-On-Read
2.1 数据仓库:先建模,再入库
我们在传统数据仓库实践中,最常挂在嘴边的一句话就是“垃圾进,垃圾出”。为了保证仓库里的数据是高质量的,从源系统抽取数据后,必须经历清洗、去重、转换、标准化等一系列动作,这个过程就是ETL。ETL强调的就是“先处理后存储”。
具体到架构上,数据仓库一般会分为贴源层、明细层、汇总层和应用层,每一层都有明确的数据加工目的。比如我们后面会详细讲到的四层架构,每一层在入库之前都做了严格的模式定义。这种做法带来的最大好处是,数据仓库的上游直接对接的可信数据,下游应用只需要关心怎么消费,而不用关心数据怎么来的、怎么清洗的。同时,数据仓库内部的索引、分区、列式存储、预聚合等优化机制,让大规模报表查询也能做到秒级响应。
但“先建模”也意味着你需要很强的业务理解力和前瞻性。如果一开始模型设计没考虑新的业务维度,后面想加一个字段,可能要让整个ETL流程推倒重跑,非常痛苦。我见过不少传统企业,数据仓库做了几年后变成了一座“沉重的金山”,里面确实有很多历史数据,但改动一个口径可能就要涉及几十张表,堪称牵一发动全身。
2.2 数据湖:先存储,再解释
数据湖则走向了另一个极端。它的做法是“先保留一切数据,包括原始的二进制流”,然后通过元数据(比如文件的路径、格式、生成时间、来源系统等)来管理这些数据。当需要分析时,你可以基于原始数据用Spark、Presto、Flink这类引擎去读取,并在读取时临时定义结构。这就是著名的“Schema-On-Read”模式。
举个例子,一个电商平台把用户点击日志以JSON格式直接丢进数据湖的目录里,不需要提前解析出字段。后续如果要做流失分析,就可以用Spark SQL在读取时把需要的事件字段提取出来;如果要做用户画像,则可以用另一个job去读取相同的原始数据,提取出不同的特征。同一个数据源,被不同业务解读成不同的结构,这正是数据湖灵活性的根源。
不过,这种灵活性也是要还债的。虽然数据湖的存储成本极低(通常使用分布式文件系统或对象存储),查询的便利性和性能却大打折扣。没有数据仓库那样的预聚合、索引和优化,你可能要对着海量小文件发愁,查询一个简单的count可能都要跑大半天。而且,因为数据在进入时没有清洗,很可能存在乱码、字段缺失、重复记录等脏数据,导致分析结果堪忧。
2.3 数据仓库经典分层架构:数据仓库分层4层到底叫啥
这里我想重点展开一下数据仓库的分层,因为很多刚接触数仓的同学总搞不清楚分层到底有哪几层,每一层的作用是什么。虽然不同公司会有微调,但最常见的、也最能体现数据仓库思想的就是四层架构:ODS层、DWD层、DWS层、ADS层。
-
ODS层(操作数据存储层):这一层也叫贴源层,主要工作是原样保存业务系统的数据,比如数据库的binlog、业务表的每日快照。ODS层的数据结构和源系统保持一致,不做太多加工,最多做一下去重和增量/全量分区。它的作用是隔离源系统变化对下游的影响,同时保留原始数据用于回溯。
-
DWD层(明细数据层):这一层是数据仓库的核心,也是“清洗与整合”发生的地方。DWD层会统一字段命名、统一编码、统一单位、解析JSON等,把ODS层的数据按照业务过程加工成事实表和维度表。比如把订单表和订单明细表进行宽表化处理,把用户维度和商品维度关联上,形成干净的、细粒度的明细数据。DWD层通常使用星型模型或者雪花模型建设。
-
DWS层(汇总数据层):这一层面向分析需求,对DWD层的明细数据做预聚合处理。比如按天、按周、按月汇总订单金额、订单数量、活跃用户数等指标。DWS层通常建设成不同粒度的汇总表,比如“用户日汇总表”“商品日汇总表”“部门日汇总表”,把指标提前算好,查询就不需要每次跑全量明细了,极大提升响应速度。
-
ADS层(应用数据层):这一层服务于具体的业务应用和BI报表,也叫应用层或数据集市层。ADS层的数据可能来自于DWS层的汇总表,也可能直接使用DWD层的明细数据,然后面向某个特定需求生成结果表。比如“销售大屏数据”“用户增长漏斗数据”。这是最终给业务人员和前端系统直接消费的地方。
很多公司还会在ODS和DWD之间加一层DIM(维度层),用来存放统一的维度表。但不管怎么调,分层的核心思想是一致的:越往下越接近原始业务,越往上越接近最终应用,每一层都有清晰的职责边界。这个四层结构体现了数据仓库“分层治理、逐层精炼”的本质,而数据湖通常没有这么严格的分层逻辑,它更像一个收纳了各种原始数据的巨型仓库。
3. 技术选型与成本考量:从选型到落地
3.1 数据仓库常用技术栈:MPP与列式存储
传统数据仓库的技术栈,我从实践的角度分成几类:一是老牌的Teradata、Oracle Exadata,这类一体机性能强悍,但价格感人,主要被大型金融、运营商企业青睐;二是MPP架构的开源产品,比如Greenplum、Vertica、ClickHouse,这些适合PB级以下的分析场景,分布式扩展能力不错,性价比更高;三是云原生的数仓服务,比如Snowflake、AWS Redshift、阿里云MaxCompute、华为云GaussDB(DWS),这类产品按量付费、弹性扩缩容,省去了运维成本。
这些技术的一个共同点是:支持标准SQL、采用列式存储、有完善的索引和压缩机制,所以特别适合高并发的报表查询和Ad-Hoc分析。我自己用的比较多的ClickHouse为例,它在聚合查询上真的能跑到单机几十亿行秒级返回,这得益于它的向量化执行引擎和主键稀疏索引。如果你想快速搭建一套内部运营分析系统,ClickHouse会是个很不错的选择。
不过数据仓库技术也有它力不从心的地方。比如存储成本相对偏高,尤其是热数据需要保存在高性能存储上;再比如对非结构化数据的支持非常薄弱,你不能期望数据仓库直接存储图片和视频文件。所以很多企业开始把不常用的冷数据和原始日志搬到数据湖中,让数据仓库专注管理高价值、高复用性的模型数据。
3.2 数据湖常用技术栈:Hadoop生态与对象存储
数据湖的代表性技术有Apache Hadoop(HDFS)、Apache Spark、Apache Flink、Apache Hive、Presto/Trino,以及云上的对象存储产品如AWS S3、阿里云OSS、腾讯云COS。现在又引入了像Delta Lake、Apache Iceberg、Apache Hudi这类“数据湖表格式”组件,它们为数据湖加上事务、更新、时间旅行等能力,解决了部分数据湖的短板。
HDFS是老牌数据湖底层的分布式文件系统,适合存储海量文件,但NameNode管理小文件的瓶颈问题一直存在。所以现在更多新项目直接使用对象存储,比如S3,配合S3的目录结构,把Parquet、ORC格式的数据文件直接放在上面,通过Spark或Trino查询。相比HDFS,对象存储没有集群运维复杂度,成本更低,而且可以和计算引擎做独立的伸缩扩展。
数据湖的核心工具Spark是最常用的离线处理引擎,支持批处理、流处理与机器学习。Presto/Trino则主要做交互式查询,直接查数据湖文件,秒级别返回并不是梦(前提是你把文件格式和分区设计好)。如果你要实时摄入数据,Flink可以担当大任。在真实项目里,数据湖的落地往往是一组工具的组合,比如用Flink做实时ETL写入数据湖,用Spark做批量修正,用Trino对外提供查询接口。
3.3 成本与性能的权衡:存储成本、计算成本、维护成本
很多老板问:数据湖是不是更省钱?坦率讲,从存储成本看,数据湖的廉价存储确实比数据仓库便宜一个量级,尤其是海量原始日志、图片文件,放在对象存储上每GB成本可以低到几毛钱。但计算成本不见得低,因为数据湖查询往往是“全表扫描”,即便有分区裁剪,查询性能也远无法和预聚合的数据仓库比,尤其面对高并发场景,需要更多的计算资源才能满足同样的QPS。这里最直接的感受就是,同样一个“按日统计订单总额”的查询,在数仓汇总表上毫秒级返回,在数据湖上可能需要几秒甚至几十秒,如果业务要求高并发,就需要堆大量的Trino或者Spark节点,费用蹭蹭往上涨。
维护成本我们也不能忽略。数据仓库有成熟的建模工具和元数据管理机制,比如Erwin、PowerDesigner、Atlas等,而数据湖如果没有配套的元数据服务(比如Hive Metastore、Glue Catalog),很容易变成混乱的“文件堆”。数据湖的权限控制、数据质量监控、血缘追溯等都需要自己搭建,这是一笔隐形的长期投入。
所以在成本考量上,我强烈建议你先计算总拥有成本,不要只盯着存储单价。数据仓库适合存放“高频使用、高价值、高一致性要求”的数据;数据湖适合存放“海量原始、低价值密度、探索型”的数据。不要把报表系统建立在数据湖上,也不要把所有原始文件都塞进数据仓库,理性划分边界才是省钱的秘诀。
4. 应用场景对照:什么时候用仓,什么时候用湖
4.1 数据仓库的典型场景:金融报表、风控、经营分析
数据仓库的价值在那些“需要严格口径、精准算钱”的场景中展现得淋漓尽致。以银行为例,资产负债报表、监管报送、客户风险评级、信贷审批决策,都要基于一个统一、可信、历史可追溯的数据底座。数据仓库在这里承担的角色是把分布在核心系统、信贷系统、渠道系统中的数据整合成统一的客户、账户、交易模型,并且保证日切、月结的稳定时效。
经营分析也离不开数据仓库。比如管理层要看各分行的存款、贷款、中间业务收入,这些指标经过统一定义后,在ADS层生成维度的汇总表,再交给BI工具展示。数据仓库的稳定性和可预期性让分析师可以完全信任指标口径,不需要从原始业务系统里拉数对比。你可以想象一下,如果一个银行业务用户问“上个月新增了多少有效客户”,你给他的数字如果和第二天的报表口径不一致,那这个系统就毫无价值。
我实际参与过一个金融类数仓项目,每天凌晨2点开始跑批处理,到早上7点前必须完成全量指标加工,这对作业调度、数据依赖管理、性能优化提出了极高的要求。数仓的分层建模和批处理调度,保证了任务的有序执行和可监控性。这种长时间、高可靠性、强一致性的需求,数据湖很难替代。
4.2 数据湖的典型场景:日志分析、机器学习、数据探索
数据湖最能发挥价值的地方,是那些业务需求还不明确、数据形态千奇百怪的场景。最典型的是用户行为日志分析。一个互联网产品的埋点日志,可能包含几十种不同事件,每个事件又有几十个字段,而且前端同学今天加一个参数,明天改一个字段名,如果每次变化都要同步改数仓模型,团队早就疯掉了。数据湖的做法是先把日志原样丢进去,等数据分析师要分析某个功能时,再去从原始数据提取对应事件字段做临时分析,既灵活又快速。
机器学习是数据湖的另一个重要应用场景。算法工程师需要海量的原始数据做特征工程,特征计算往往是探索式的,SQL中可能频繁需要join多张宽表、窗口函数、UDF。这些特征在初始阶段并不需要像数仓那样保证强一致性和事务,而数据湖可以提供一个“数据沙箱”式的环境,让算法工程师随时读取原始数据,自由探索,反复试验。对于模型训练,数据湖也是天然的样本湖,把训练集、验证集、测试集以文件形式存储,便于分布式训练框架快速加载。
除此之外,物联网时序数据、语音文本非结构化数据,也适合先入湖。我们曾做过一个智能设备的预测性维护项目,设备上报的传感器数据每天几十亿条,而且格式经常变化,我们用Flink把流式数据写入Iceberg表,再通过Spark做离线分析。数据湖让我们省去了事先定义所有字段的烦恼,并且在后期加入新设备类型时,不用改动历史数据就能读取新字段。
4.3 案例解读:中国银行广东分行数据仓库的成功应用
我注意到热搜里有“中国银行广东分行数据仓库成功应用案例”,这里可以结合公开信息和行业常识做一个技术向的解读。这个案例常被用来说明数据仓库如何在大规模金融业务中落地。广东分行由于业务覆盖广、分支机构多,面临的数据整合压力相当大。在建设数据仓库后,他们主要解决了几类问题:
- 第一,实现了跨系统数据的统一整合。把核心银行系统、信用卡系统、信贷系统、渠道系统等的业务数据统一抽取到数据仓库中,通过数据模型构建了客户、产品、机构、协议等主题域,解决了“同一个客户在不同系统中信息不一致”的难题。
- 第二,提升了经营管理与监管报送的时效。数据仓库提供了一套标准的日批处理流程,能够稳定地在规定时间窗口内完成全行数据计算生成各类报表,满足内部经营分析以及外部监管的报送要求。
- 第三,支持了客户营销与风控的精细化运营。通过数据仓库里的客户统一视图,可以分析客户资产结构、交易行为、产品持有等,从而在恰当的时间开展精准营销,同时通过风险指标模型对潜在的风险进行识别。
我特别留意到这类金融行业的数仓项目的几个特点:第一,对数据质量和数据安全要求极高,所以源端抽取时做了很多校验逻辑;第二,性能调优极其重要,因为数据量很大,跑批也会很慢,需要使用分区、索引、并行等技巧;第三,人员组织上需要专职的数仓开发和数据治理团队,保证模型能够持续维护和演进。这些经验对所有传统行业做数仓数字化转型都有很好的参考意义。
有人可能会问,中国银行广东分行现在是不是也用了数据湖?这个我没有公开信息就不乱说。但据我了解,很多银行虽然数仓为主,数据湖也在慢慢引入,用于存储影像文件、日志、外部舆情等非结构化数据。最终他们都走向了“湖仓一体”的路线。
5. 湖仓一体:未来的趋势还是过渡方案?
5.1 数据湖的痛点:数据沼泽与能力缺失
数据湖发展了这么多年,问题也渐渐暴露。最著名的是“数据沼泽”现象:由于数据湖不强制结构化,且缺乏治理,导致很多数据被丢进去后就再也找不到,或者即使找到了也不知道该怎么解析。团队如果缺少强力的数据目录和数据质量工具,数据湖最终会变成一个“只进不出”的黑洞,存储成本上去了,价值却很有限。
数据湖还有一个痛点是无法可靠地支持更新和事务。传统Hive表在写入过程中如果任务失败,可能导致部分数据可见、部分数据不可见,而且不支持update/delete操作,要改一条记录得重写整个分区。对于需要频繁修改和删数(比如用户注销后的数据清理,比如错误修正)的业务场景,直接基于数据湖做业务系统是寸步难行的。此外,数据湖上的SQL服务无论用Hive还是Spark,查询性能和数据仓库相比都有不小的差距,不支持高并发和低延迟的交互式分析。
5.2 湖仓一体架构:结合两者的优势
为了解决上述问题,业界提出了“Lakehouse(湖仓一体)”架构,像Delta Lake、Apache Iceberg、Apache Hudi这类项目正是这个理念的产物。它们的核心贡献是在数据湖的文件之上,增加了一层表格式(Table Format),提供了ACID事务、可扩展元数据、时间旅行(time travel)、upsert(插入更新)等能力,让数据湖也能拥有部分数仓的特性。
举一个我们实际使用过的例子:用Iceberg管理数据湖中的订单明细表。在传统Hive表场景下,实时流(比如Flink)和离线批任务同时写一张表,很容易产生数据不一致或者小文件问题。而Iceberg引入了乐观并发控制,多个任务可以安全地同时写入,并且通过metadata文件管理快照,查询永远能读到一致的数据快照。同时,Iceberg支持“隐藏分区”,可以基于某个列自动做分区演化,不需要用户手动调整分区目录,极大简化了运维。
那湖仓一体能取代传统数据仓库吗?我认为短期还不能完全取代,尤其在功能成熟度、工具生态、团队技能方面,数据仓库依然有一席之地。比如一些BI工具对数据仓库的适配非常完善,但对Iceberg/Delta的支持不够原始;很多传统DBA对数据湖技术栈也不太熟悉。但湖仓一体确实是大趋势,它能够让同一个平台既承载数仓的报表分析,也能支撑数据湖的探寻式分析,减少数据和计算孤岛的打通成本。
5.3 企业落地湖仓一体的几个步骤建议
如果你们公司打算从“传统数仓+Hadoop湖”走向湖仓一体,我给的落地建议是:先不要推到重建,而是“共存演进”地往前推进。
- 第一步,盘点现有数据和业务场景,识别出哪些数据适合存在数仓中(如监管报表,经营分析),哪些适合放在湖上(如原始日志,探索分析)。
- 第二步,选择一个合适的湖仓缓存表格式。目前开源社区里,Iceberg更强调性能和跨引擎能力,Hudi在UPSERT和增量处理上有优势,Delta Lake则和Spark结合紧密。需要根据自身团队技能来选择,不要盲目追求热门。
- 第三步,建设统一的元数据服务和数据权限平台,让用户在统一数据目录中找到数据,并且通过同一套权限控制访问数仓或数据湖。这是湖仓一体能否落地的关键。
- 第四步,逐步把一些需要实时更新的场景从传统批量数仓迁移到湖仓一体的流程中,比如实时明细写入、upsert操作。同时把部分离线数仓的ODS/DWD层数据同步到数据湖中,作为冷备和数据探索的共享层。
我们团队在过渡阶段的做法是:数据仓库仍然作为报表和核心指标源的“事实标准”,数据湖则作为原始数据的“集散中心”,并通过定时任务把DWD层的数据导出到湖里一份,供算法团队做特征探索。这样的架构既保持了稳定,又兼顾了灵活。
6. 我的一些实操心得与避坑建议
6.1 不要迷信“湖”能取代“仓”
这几年数据湖的概念一度被炒作得很厉害,甚至有人喊出“数据湖取代数据仓库”。我自己见过不少公司想一股脑把所有数据都放进湖里,然后期待上层应用直接跑SQL,结果被性能和治理问题折磨得体无完肤。核心原因在于,数据仓库的数据模型和治理体系是几十年积累下来的成熟方法论,这不是简单的技术替换能颠覆的。如果你连“什么是订单事实表”“什么是缓慢变化维”都没搞清楚,那么上数据湖大概率会是一场灾难。
反过来说,数据仓库也有自己的边界,不能解决一切数据问题。所以我的整体建议是:从实际业务场景出发,数据仓库用于“精确计算”,数据湖用于“广泛探索”,两者互补大于替代。如果你未来打算做更高级的机器学习、数据科学,那必须拥抱数据湖;如果你主要服务管理层报表和监管报送,那么数仓依旧应该是主体。
6.2 数据治理是不可回避的共同主题
无论你选择数仓、数据湖还是湖仓一体,数据治理都必须从一开始就纳入架构设计,不要指望事后补救。数据治理包含的内容很多:数据标准落地、元数据管理、数据血缘追踪、数据质量规则、数据安全权限、生命周期管理等。
我见过几个数据湖项目,因为一开始没治理,半年后数据目录里出现了几千张“data_2024-xx-xx”这样的表,根本不知道每张表代表什么,最后只能全部删掉重来。与之相反,一个经营得当的数据仓库即使数据量不大,如果元数据和血缘清晰,其业务价值往往远高于一片混乱的数据湖。因此,在数据进入系统的第一天就要登记来源、所有者、业务含义、敏感等级。对于敏感数据(如个人隐私),无论放在哪一侧,都必须做好脱敏和权限隔离,否则法律风险不可忽视,这一点在金融行业尤其重视。
6.3 给初学者的入门学习路径
最后给刚接触大数据、想好好学习数据仓库和数据湖的朋友一条学习路径参考:
- 先把关系型数据库的基本功打牢,理解SQL、索引、事务、维度建模理论,这几乎是所有数据的基石。你可以读一读《数据仓库工具箱》这本书,先掌握维度建模方法。
- 第二步,动手搭建一套简化的数仓环境。建议从PostgreSQL或MySQL开始,手动建立ODS、DWD、DWS、ADS四层表,用定时脚本完成ETL,然后用一个开源BI工具(如Metabase、Superset)做数据可视化,跑通一个从业务库到报表的全流程。
- 第三步,学习Hadoop生态组件。可以装一个单机版的Spark和Hive,把前面生产的数据文件放到HDFS上,用Spark SQL做同样的分析,感受一下数据湖和数仓在查询方式上的异同。
- 第四步,深入学习一种湖仓格式。可以选择Apache Iceberg(因为社区活跃),试着用Spark读写分区表,体验时间旅行和ACID事务。最好找一个在线学习资源或开源项目实操,比如GitHub上的spark-demo项目。
- 第五步,把数据治理贯穿到整个学习过程中,尝试用Apache Atlas或DataHub来登记元数据,用Great Expectations做数据质量校验,用Ranger或类似工具做权限管理。坚持下来,你对数据架构的理解会远超很多人。
从我个人的学习经历来说,数据架构这条路没有什么捷径,最好的方式就是一边做项目一边踩坑。技术选型之前,一定要提醒自己:数据仓库和数据湖的区别不仅仅在技术上,更在团队认知和管理方式上。能理解到这一层,你再来设计系统,视角会不一样很多。
另外,有一个小技巧想分享给正在做数仓建模的同学:在DWD层建宽表时,不要一味地“全字段拉通”,尽量只保留经常一起使用的字段,否则大宽表会膨胀得非常快,而且不是所有引擎都能处理大量列。如果你发现有些字段几乎没人用,就要有勇气把它们拆到附属扩展表里。这个习惯能让你少跟运维和性能调优掰扯很多时间。
