etl报表开发是什么意思_中间表是什么?和报表有什么关系?会带来怎样的问题?又如何解决?...

在数据库中有一类用于保存中间计算结果的物理表,通常被称为“中间表”。中间表主要跟 OLAP(在线联机分析)业务有关,产生的原因主要有以下几方面。

ed7df5a7d3694fb6d31e65cc677e62ef.png


中间表来源1. 计算逻辑复杂
在 OLAP(报表或查询)业务中,有些计算逻辑很复杂,每次都从头写会导致报表开发过于繁琐,而且有的计算用 SQL 很难写出来。这时会采用中间表事先计算好,再基于预计算的中间结果开发报表。
计算逻辑复杂常见于报表业务中,以固定报表最为常见;多维分析则比较少见。2. 查询性能差
当查询涉及的数据量很大或者计算逻辑很复杂时查询性能会很差。为了提升查询性能,增强用户体验,通常会把汇总结果实现计算出来存储在中间表中。基于预汇总的中间表查询速度会快很多。
在实际业务中,大部分提升查询速度的中间表也都是为报表服务的。3.ETL 过程转存
ETL 过程也会产生中间表。ETL 过程中常常会涉及到数据库的数据,正常的 ETL 过程应当是 E、T、L 这三个步骤逐步进行,也就是先清洗转换之后再加载进数据库,最后在数据库中的只是合理的结果数据。但是,E(清洗)和 T(转换)这两个步骤中会涉及到大量数据计算,而在数据库外实施这些计算很不方便,所以实际情况就会是把涉及到的所有数据都先加载进来然后再进行清洗和转换,ETL 过程变成了 ELT 甚至 LET。事先要加载的这些数据在关系数据库中也必须以表的形式存储,这就使数据库中增加了许多并非最终需要的中间表。
如果观察一下这些跑批任务,你会发现 ETL 任务很多都是为报表业务服务的。4. 多样性数据源混合计算
另一种情况是多样性数据源造成的,这也是为数据呈现(报表查询)服务的。现代应用中的数据呈现经常会涉及数据库外的数据,目前一般的做法是把库外数据定时导入到数据库中,然后就能和数据库内的数据一起运算产生报表,否则很难实现数据库内外的数据的混合运算。这当然也会让数据库中多了一些表,而且,有些互联网上取过来的数据常常是多层的 json 或 XML 格式,在关系数据库中还要建立多个关联的表来存储,会进一步加剧中间表过多的问题。
通过列举的 4 个中间表产生的主要原因,我们发现一个共同点:中间表大部分情况都是为报表服务的。我们也知道,实际业务中的报表数量非常多,而且报表业务业务不稳定经常会新增修改报表,这会导致中间表数量不断增多。
中间表会带来哪些问题
中间表是一把双刃剑,提供很多便利的同时也会带来一些问题。
我们曾在一个运营商的报表系统中,发现了一个让人吃惊的现象。在 DB2 数据仓库中,有两万多个数据库表!经过深入了解发现,真正的原始数据表只有几百张,剩下的大量的数据库表都是为查询和报表服务的中间表。
像这种系统经过几年乃至十几年的运行,数据库中的中间表越来越多,甚至出现这种上万个的情况并不少见。大量中间表带来的直接困扰是数据库存储空间不够用,面临频繁的扩容需求。中间表对应的存储过程、触发器等等需要占用数据库的计算资源,也会造成数据库的扩容压力。
中间表过多还会带来管理方面的问题,对于成千上万张中间表想要梳理清楚恐怕是一件非常头疼的事情。
那么,是不是可以清理掉一些不用的中间表?一般的结论都是:搞不动。数据库中的中间表是不同程序员制作的,有的是综合查询系统使用,有的是报表系统使用。中间表之间还存在交叉引用,有些程序员看到有别人生成的中间表就直接使用了。有时候一些查询报表已经废弃不用了,但是对应的中间表没人敢删,因为不知道删掉之后会影响其他什么查询或者报表。
很多情况下,项目组只好为了越来越多的中间表去扩容数据库。但是数据库的扩容成本太昂贵了:不管是换更强的服务器(纵向扩容),还是增加数据库服务器的节点(横向扩容),都不便宜。
总结来说,中间表会带来管理、容量和性能三方面的问题。
如何解决中间表的问题?
可以很容易想到的方式是使用库外文件存储中间表数据,这样中间表脱离了数据库就不会对数据库再产生影响。但是,在实际应用中这种办法却很少使用。为什么呢?
我们知道,中间表是要再计算的,基于中间表查询的报表还要进行数据过滤,有的还要再次汇总,还可能涉及关联计算,这些操作在数据库里通过 SQL 完成很简单。但是文件没有计算能力,要实施这些计算只能硬编码,用 JAVA 来做,使用 JAVA 来做集合运算又非常麻烦,远没有数据库(SQL)方便。所以采用文件存储中间表的方式使用并不广泛,主要是由实现复杂度过高导致的。
那还有什么好的方式呢?使用支持文件源的报表工具
既然中间表大部分是为报表服务的,而通过将中间表外置到文件中可以解决中间表带来的这些问题,那么直接使用支持文件源的报表工具是否就可以了呢?
答案是肯定的。
我们来看一下要实现这个目标,报表工具要具备哪些能力?(1) 丰富的计算类库
要解决文本计算难的问题,报表工具要提供丰富的计算类库,除了能完成所有数据处理任务(都能算)以外,还要实现简单,这是基础,太复杂了没法用;(2) 多样性数据源接口
支持多样性数据源以后,就可以不用通过数据库中转直接读取多样性数据源数据出报表;(3) 异构数据源混合计算能力
提供多样性数据源接口后,还要能够进行异构源间的混合计算,这样就可以彻底解决掉多样性数据源带来的中间表问题;(4) 高性能
除了实现简单以外,计算性能也要有保障,从而满足前端报表查询的性能需要。
具体实现上可以在报表工具中增加计算模块来对接“库外中间表”,结构类似这样

7586801e30fbd59bd3aeae2639df9d00.png


其中库外中间数据文件可以采用本地文件,也可以使用网络或分布式文件系统,或其他数据源。
要解决中间表问题,需要报表工具强化自身的计算能力才能实现!
参考资料:
【数据蒋堂】第 14 期:计算封闭性导致臃肿的数据库
【数据蒋堂】第 15 期:开放的计算能力为数据库瘦身
有效减少数据库中间表的报表开发方法
为什么会有这么多中间表?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

追加一列 python_常用的python代码总结

使用pandas读取csv文件import pandas as pddf pd.read_csv("nodes.csv")a df.iloc[j]["x"] # 得到第j行标头为x的值 b df.loc[j]["x"] # 得到index为j的标头为x的值ids df["id"].values.tolist() # 得到标头为id的一列&#xff0c…

socketmq 设置队列大小_[译] TCP的SYN队列和Accept队列

关于两个队列首先我们必须明白,处于“LISTENING”状态的TCP socket,有两个独立的队列:SYN队列(SYN Queue)Accept队列(Accept Queue)这两个术语有时也被称为“reqsk_queue”,“ACK ba…

can总线报文是固定的吗_新能源汽车CAN总线Bus Off处理流程

CAN总线由其高可靠和实时性被广泛应用于新能源汽车、轨道交通、医疗、工程机械等行业,本文介绍CAN总线关闭对新能源汽车的功能和安全性能产生的影响,并针对工程师关注的问题,提供有效的解决方案。2020年10月28日全球汽车峰会中展示了未来新能…

使用中断后不停止_乔丹体育公司构成侵权,为何又不判令彻底停止使用“乔丹”注册商标?法院解释来了...

2020年12月30日,上海二中院发布了迈克尔•乔丹姓名权纠纷案一审判决结果,引发社会各界广泛关注。现就大家关注的若干问题作如下释疑:1. 为何认定乔丹体育公司构成侵权乔丹体育公司是在明知迈克尔•乔丹具有较高知名度的情况下,仍然…

如何在家访问公司的文件服务器,企业的共享文件,该怎么高效管理?

原标题:企业的共享文件,该怎么高效管理?现在的企业基本上都有自己的文件服务器,并且会经常共享文件让局域网内用户访问。而企业的网络服务器共享文件是企业的无形资产和商业保密信息,员工也经常根据网络服务器来远程控…

roads 用户体验标准_全球领先技术加持,联发科 天玑1000+刷新5G用户体验新标准...

随着5G基站的一步步铺建,越来越多的地方都逐渐可以接收到5G信号了。这自然也催促着芯片厂商尽快推出全新的5G移动平台,比如骁龙的X55基带、华为的巴龙5000基带等。但在目前的环境下,尽管这些基带的加入让手机移动平台能够支持5G网络&#xff…

window系统服务器改名,微软:不会将 Windows Server 改名为 Microsoft Server 系统

原标题:微软:不会将 Windows Server 改名为 Microsoft Server 系统IT之家 4 月 18 日消息 外媒 MSPoweruser 报道,微软已经迅速行动,粉碎了一个传闻,此前有消息称,微软正计划将 Windows Server 更名为 Micr…

deebot扫地机器人使用_完美主义的双子座也选这款扫地机——小米米家扫地机器人使用心得...

赵女士是一枚85后,热爱生活、完美主义、中度洁癖。自从搬了新家后,赵女士一直想添置一台扫地机器人,一方面,孩子经常喜欢赤脚在家中玩耍,另一方面,白天上班晚上回来打扫卫生总显得有些心有余而力不足&#…

路畅畅云固件升级教程_斐讯K2P MTK版简单几步刷入breed教程,附刷第三方固件方法...

教程适用于 K2P MTK版本(A1/A2)。教程转载自恩山1、检查路由固件版本,是否V22.8.5.189或V22.10.2.24,版本低于22.8.5.189就手动上传升级一下。2、下载辅助工具刷入breed。下载辅助工具,解压压缩文件到任意目录。解压后保留一下几个文件&#…

edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...

接着上一讲奔腾的心:FreeRTOS 从入门到精通5--详解任务管理上​zhuanlan.zhihu.com在这一讲中我将要介绍任务的运行模式,同时与可编程控制器(PLC)以及安卓系统的运行模式进行比较。我在德国读书时专业是嵌入式开发,工作…

ps去水印教程_ps去水印教程,详细解析五种去水印的方法

平常我们从一些素材网站下载图片的时候,不免会带上一些水印,使图片的整体美感下降不少,今天教同学们五种去除水印的方法,相信你学习以后,有所收获,遇到喜欢的图片可以把不想要的水印去掉,不过水…

excel 图片转url_最全总结 | 聊聊 Python 办公自动化之 Excel(下)

聊聊 Python 数据处理全家桶(Memca 篇)点击上方“AirPython”,选择“加为星标”第一时间关注 Python 技术干货!1. 前言前面谈到 Python 处理 Excel 文件最常见的两种方式,即:xlrd/xlwt、openpyxl其中,xlrd/xlwt 这一组…

日志中出现乱码_合宙Luat | 乱码搞得一团糟?开源神器帮你轻松修复

鎰熸仼鐩搁亣缇庡ソ鐨勬椂鍏変笌澶у鐩镐即2021锛屾柊骞村揩涔愶紒相信大家在日常生活中,都见过类似上面的字符串。这些看起来不明所以的内容,通常被称作乱码。那么乱码是如何产生的,并且如何修复呢?我们接下来将一步步讲解。1你…

轮播高度_Qt编写自定义控件24-图片轮播控件

一、前言上一篇文章写的广告轮播控件,采用的传统widget堆积设置样式表做的,这次必须要用到更高级的QPainter来绘制了,这个才是最高效的办法,本控件参考雨田哥的轮播控件,经过大规模的改造而成,相比于原来的…

自定义按键_王者荣耀:自定义按键让你的百里守约百发百中

在王者荣耀中,有很多输出炸裂的射手,但是他们普遍手不够长!但是其中就有一位,他不仅手很长,而且打得还很疼!他就是刺客兼射手的——百里守约百里守约,他不是射手,是刺客!…

生成特征_使用gplearn自定义特征自动生成模块

背景:数据科学领域中,数据一直都是主要驱动力,特征工程作为其中重要一环,成为无论是kaggle类的数据竞赛,还是工业界应用中关注的重点。特征工程中有重要的一个环节叫做特征融合,好的特征融合能帮助构造当前…

2台服务器负载均衡后synchronized_一篇有趣的负载均衡算法实现

负载平衡(Load balancing)是一种在多个计算机(网络、CPU、磁盘)之间均匀分配资源,以提高资源利用的技术。使用负载均衡可以最大化服务吞吐量,可能最小化响应时间,同时由于使用负载均衡时,会使用多个服务器节点代单点服务&#xff…

mysql 重装之后_mysql重装之后 复制data

(哇,编程小白的第一篇博客丫,激动)Q one:mysql需要重装,数据该怎么办。方法一:数据表最好是导出成.sql文件,这样才比较安全。方法二:直接copy了data文件:在mysql安装盘下的programda…

vs2010 mysql linq to sql 系列_LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据...

LINQ和 LINQ to SQL 都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列。本文使用的测试环境是VS 2010,和sql server 2005数据库。第一篇 从CUD开始,如何使用LINQ to SQL插入…

redis session 超时时间_Shiro性能优化:解决Session频繁读写问题

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达作者 | 张永恒来源 | urlify.cn/YjEZNj背景Shiro 提供了强大的 Session 管理功能,基于 Shiro 实现 Session 共享非常方便,只需要定制一个我们自己的SessionDAO&#x…