数据仓库为什么要有ODS层?by 彭文华

简介: 数据仓库为什么要有ODS层?by 彭文华

这是彭文华的第177篇原创

今天很开心,又收获了一个新的好问题。北京的一个开发同学Lucas,被领导拖过去做数仓了。他把我写的数仓文章都读了一遍之后,他觉得ODS层根本没啥用啊,压根不能理解为啥要有一层。

这个问题问的好啊!也许我当年学习的时候也遇到过这个问题,但是现在已经把它当成理所应当了。

所以我现在非常喜欢跟任何人聊天,尤其是外行或者初学者,因为他们才能问出真问题。有问题的,可以加我微信:shirenpengwh,咱私聊啊。


ODS是啥?

这种问题,学究派最喜欢给定义了。比如:ODS ( Operational Data Store ),操作数据存储,用来存储多个异构数据源系统的明细数据,是数据仓库的最底层。


这种回答当做字典还是很好用的,但是对于初学者就非常不友好了。一个问题衍生出来无数的问题,满脑子都是问号。你看:什么叫操作数据?什么叫异构数据源?数据仓库的最底层?那上面还有几层?


所以,我一般喜欢先做个考古研究,然后再给一个简单理解的方式。

比如下面这张图,就是数据仓库鼻祖Inmon大佬画的CIF架构。原图比较乱,我给加了一些注释,方便你看的更清楚一些。

右下角是业务系统,会源源不断的产生各种数据;我们右上半拉就是数据仓库以及上层的应用体系。

我们搜索一下ODS关键词,发现在两个地方都有,业务系统有一个Local ODS,数仓体系里有一个Global ODS。


这时候我们再回到ODS的名字“操作数据存储”上。顾名思义,这就是把业务操作的数据物理化存储呗。那Local ODS就是把业务数据存在本地,这是必然的,不存下来,这系统不白做了么?

好,1个业务系统是这样,那10个业务系统也是这样,比如上图中左侧的“ERP”,通常也是数仓的重要数据来源之一。Inmon老爷子还贴心的标注了数据流向。

通常来说,一个数据仓库都会从多个系统中获取数据,以获取更全面的信息。而这些系统建立的时间不一样,供应商也不一样,数据库很可能就也不一样,甚至只是文本存储。那么,不一样的数据来源,我们就给取个字数少一些的名字,就叫异构数据源。

ok,现在再去理解Global ODS就很容易理解了,这就是一个数据归集的地方,从全局视角,把每个系统的业务操作数据都堆放在这里。


为啥要有ODS?

即便是到这里,依然没有解答这哥们的问题。为啥要有ODS啊?

哥们是开发出身,他的习惯就只有一个业务库加一个测试库。所有数据到业务库里读取不就完事了么?还整一个ODS,而且结构还得跟业务库一毛一样,不仅多个事儿,而且还浪费存储,又没啥用。这不是脱了裤子放屁,多此一举么?


可能我是那种比较老实的人,也有可能我当时也有这个问题,后来就忘记了。反正我印象中是没有这么多问题的。


其实理解这个问题也很简单。你看inmon老爷子给上面架构取的名字就叫“企业信息工厂,Corporate Information Factory , CIF”。工厂么,当然得加工东西了,信息工厂就是加工信息,也就是数据的罗。

所以我们得有一个放原料的地方吧?总不可能工厂的流水线直接对准菜地吧?

诶,这个放原料的地方,就是ODS了。只不过数据跟其他实物不一样,它可以复制啊!所以我们就在数仓这里复制一份一模一样的就好了。

只不过呢,我们为了生产管理的需要,从其他原料加工厂(业务系统)里拿原料过来的同时,可能会贴上一些标签,比如是谁,什么时候,从哪里拿来的原料。这样发生问题后呢,可以方便我们回溯,找到问题的根源,重新跑一下数据也很方便。

Lucas同学明白了,我很开心,希望也能给你带来一些启发。

相关实践学习
数据库实验室挑战任务-初级任务
本场景介绍如何开通属于你的免费云数据库,在RDS-MySQL中完成对学生成绩的详情查询,执行指定类型SQL。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
存储 SQL 消息中间件
[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念
ODS 全称是 Operational Data Store**,操作数据存储.“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。
2272 0
|
数据采集 数据挖掘 BI
|
4月前
|
SQL 关系型数据库 MySQL
在云数据仓库AnalyticDB MySQL版中,有几个参数可能影响SELECT查询的执行及其稳定性
在云数据仓库AnalyticDB MySQL版中,有几个参数可能影响SELECT查询的执行及其稳定性【1月更文挑战第16天】【1月更文挑战第80篇】
295 4
|
11天前
|
Cloud Native 关系型数据库 OLAP
云原生数据仓库产品使用合集之阿里云云原生数据仓库AnalyticDB PostgreSQL版的重分布时间主要取决的是什么
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
11天前
|
运维 Cloud Native 关系型数据库
云原生数据仓库产品使用合集之原生数据仓库AnalyticDB PostgreSQL版如果是列存表的话, adb支持通过根据某个字段做upsert吗
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
2月前
|
SQL Cloud Native 关系型数据库
AnalyticDB MySQL湖仓版是一个云原生数据仓库
【2月更文挑战第15天】AnalyticDB MySQL湖仓版是一个云原生数据仓库
26 2
|
4月前
|
分布式计算 DataWorks 关系型数据库
在云数据仓库AnalyticDB MySQL版中,LIMIT的大小是由系统参数max_limit控制的
【1月更文挑战第7天】【1月更文挑战第31篇】在云数据仓库AnalyticDB MySQL版中,LIMIT的大小是由系统参数max_limit控制的
31 1
|
5月前
|
存储 分布式计算 关系型数据库
云原生数据仓库AnalyticDB MySQL湖仓版架构升级,持续释放技术红利!
云原生数据仓库AnalyticDB MySQL湖仓版架降价23%!持续提供高性价比的产品服务
|
5月前
|
存储 分布式计算 关系型数据库