听闻Teradata退出中国,我想起了我经历过的一个数仓项目

时间:2023-02-17 11:09:18

听闻Teradata退出中国,我想起了我经历过的一个数仓项目

昨天,Teradata撤出中国,我想起了我在20年前做的数据仓库项目。想当年Teradata是数据仓库的代名词啊,就如同现在搜索东西好多人说百度一下一样。

可惜我没有用过Teradata。2002年,我基于SQLServer的数据仓库+商业智能做了一套所谓的决策支持系统。决策支持系统DSS,这样的名字在当年很流行。

(1)

20年前的数据来源和现在仍然差不多:

  • 不少来自Excel,那就ETL抽进来

  • 有些想要采集的数据没有应用软件,那就用OA-无代码表单做个简单应用录入进来,然后再ETL抽进来

  • 有些数据是专门的应用软件沉淀下来的,ETL抽进来

所以第一个需要的就是ETL工具。我是2013年以前用SQLServer套件,记得SQLServer的ETL工具被命名为Integration Services。

(2)

多种数据来源的数据抽进来,因为他们都来自不同系统,所以有些公用的数据事实上是主数据,但是过去企业上应用都是一块块上的应用,财务部门上财务软件供本部门的财务人员内部使用,销售部门上销售软件供本部门的销售人员内部使用,采购部门上采购部门供本部门的采购人员内部使用,所以事实上的主数据都是不统一的,事实上的同一个东西,在不同系统有不同名字、不同编码、不同字段。在日常应用软件各自部门使用时没啥问题,但是这次要做企业整体的决策支持系统,要给老板看数据,这就必须要做统一。所以必须要有主数据管理系统,这就涉及到了MDM(Master Data Mgt.)。

(3)

主数据要人为地定义下来标准,然后做清洗-整合-统一,或者以谁为主做互相映射,这就涉及到主数据的复制分发或同步。我记得SQLServer有一个专门的Replication Services。现在在新一代大数据技术中,大家更经常使用Kafka。

(4)

除了主数据放在MDM里,那些业务数据ETL来-清洗好,就放在事实表里。这就涉及到ODS服务(Operational Data Store),以便下一步在数据仓库里建立模型-建立模型维度,然后把数据从ODS里再抽取到数据仓库里,按照维度存储取来,以后好做多维分析。

企业数据往往是文本型、结构性的,所以过去的ODS最擅长处理这类数据。互联网公司的数据更加多样化,博客文章、邮件、IM消息、文档、图片、视频,所以才发明了Hadoop来充当数据湖。不过Hadoop数据湖擅长处理非结构化、多媒体数据,反而又不擅长处理文本型、结构性数据,所以现在人们又在探索湖上架仓、湖仓一体,如Delta、Hudi、Iceberg就是这么探索着。

(5)

好,下一步这就涉及到了数据仓库。我学习到的数据仓库都是列式多维数据仓库。但是现在很多人说数据仓库就是个虚拟概念,不需要非得用多维数据仓库,普通的行式关系数据库就能搞数据仓库。这就让我比较懵啊,这和我的经历不一样啊。我想最起码你也得用OLAP型数据库啊,而不能用OLTP型数据库啊。

所以对于中国客户,目前的现状主要是出复杂的二维报表,而不是做多维分析,我的建议是不要搞多维数据仓库,不要用真正的数据仓库产品,用OLAP型数据库搞就行了。所以我更建议推荐类似Greenplum、ClickHouse、Apache Doris就可以。但是我坚决反对用OLTP关系数据库搞数据仓库。有的人是直接在OLTP SQLServer行式关系数据库或者MySQL行式关系数据库上搞所谓的数据仓库,把所谓的数据仓库、报表、商业智能都混为一谈,要么都叫数据仓库、要么都叫商业智能,真是偷梁换柱的可以啊。

(6)

按照领域-按照主题-按照模型-按照维度,把数据从ODS入仓。但是入仓过程中还有一个小插曲。因为有些复杂分析指标需要复杂计算出来,还得保存起来,以便以后做历史对比。

所以,需要专门的多维计算编程语言来做某些指标的复杂计算,计算出来结果再放进数仓里。像SQLServer里有DMX(多维扩展开发语言)就是干这事用的。现在在开源新一代大数据技术中,其实Flink或Spark它们干的就是这个事。

(7)

数据终于全都按维度条状入了仓后,人们做的最常见的事情就是出复杂分析报表,需要很多关联性的指标都配比出现在同一张报表里。所以这里就涉及到SQLServer的Rerport Service。

很多人不搞多维数仓,在OLTP关系数据库上直接出复杂配比综合分析报表,我见过有人写了1000多行的存储过程来出一张报表,根本很难阅读看懂、修改、调试跟踪。

在90年代用Powerbuilder出复杂报表时有个工具叫Cross Table,我们叫交叉报表,我看在Excel里叫Pivotal叫透视表。这都是做复杂配比综合分析平面报表的常见工具。

(8)

还有一种根本不是报表,但被人们称作报表,其实我把它称为查询Query,只不过用Grid显示为Table格式。我想这类东西就不应该用多维数据仓库搞,只需要从ODS事实表里出就行。不过现在新一代大数据技术中,主要使用Presto这样的大数据查询引擎来搞。

SQLServer商业智能套件里还有一个服务叫Index Services,就是全文检索服务。不过现在新一代大数据技术中,主要使用ElasticSearch这样的大数据搜索引擎来搞。

(9)

还有一种更复杂的可视化分析,它既带有可视化的特点,又带有分析的特点,我们把它叫做Cube。

我在SQLServer商业智能套件里、在IBM Cognos套件里,都使用过Cube。它可以上钻下钻、旋转、切片。我看在新一代大数据技术中,Kylin就在重点做这个。

(10)

除了Cube这种既带有可视化特点又有分析特点的工具之外,还有一种真正的分析,在SQLServer里叫Analysis Services。也有人称作是数据挖掘。

我用Analysis Services做过分类算法、聚类算法、决策树算法、线性回归算法、时序算法。当时微软还没提供神经网络算法。现在新一代大数据技术Spark套件中,也有MLLib,就是机器学习算法库,也是这些。不过现在人工智能Tensorflow平台和Pytorch平台上的,都已经是深度学习的各种算法和模型了,这和机器学习算法库是另外的路数了。

(11)

我几乎把SQLServer商业智能套件里的产品都用了遍,不过事实结果是:

卖的不好,可以在宣传和打单时展示实力,但实际上没卖出几套。

实施很复杂,要做很多SQL编写工作。过去的实施顾问还会数据库结构和SQL,现在的实施顾问只会功能界面配置了。虽然已经内置了不少业务分析模板,但是总要做一些从展示修改到数据计算修改到数据ETL抽取修改的东西。

客户使用过程中,倒是出了很多内置的复杂的配比指标报表可视化和图表可视化,但是很不幸,客户业务专业能力水平比较低,看不懂这么复杂的配比综合报表。

真是有什么样水平的甲方,就需要匹配什么样水平的乙方。

(12)

你问我这十多年来产生了那么多新一代大数据技术,到底解决了啥问题?

我想说的是:这些新一代大数据技术,主要适用于互联网公司,他们主要是多模态的数据,而且是真正的海量数据。而中国企业内部应用,主要是文本型结构性数据,而且是假的海量数据(每天连十万条重要的业务数据记录都产生不了),所以我的观点是:中国企业内部应用数据分析,建议还是用20多年前老的商业套件来搞,不要赶时髦。因为新一代大数据技术,又不适合,又更复杂,没那么必要。

不过,我也知道我这么说也是白说。乙方总得要讲新故事新产品,管你需不需要新一代大数据技术,搞就是了。挣钱嘛,不寒碜。