oracle一次性说清楚,多种分隔符的一个字段拆分多行,再多行多列多种分隔符拆多行,最终处理超亿亿。。亿级别数据量(下)

简介: 笔记

🎨2、多行多列多分隔符拆分


       我们先来看看原始数据的,再来尝试拆分

8.png

🍋代码:


SELECT   REGEXP_SUBSTR (PH,'[^/|\|//|*]+',1,LEVEL) PH,
REGEXP_SUBSTR (S杂,'[^/|\|//|*]+',1,LEVEL) S杂
from   (  select PH,S杂 from  qz_zb_cpjcjg  where  1=1   
and PH is not null and S杂   is not null 
and rownum<=2
)  qz_zb_cpjcjg
CONNECT BY REGEXP_SUBSTR (PH,'[^/|\|//|*]+',1,LEVEL) is not null or
 REGEXP_SUBSTR (S杂,'[^/|\|//|*]+',1,LEVEL) is not null

🍋效果:

9.png

🍋解析:


       当出现2行,第一列为3个值,第二列为4个值,此时拆分的总行数为(1+2+4+8)*2行=30行,当我们把行数改为3行的时候发现拆分后的结果为(1+3+9+27)*3行=120行,当我们将行数改成4行时拆分结果为(1+4+16+64)*4=340行。此时我们发现当行数增加时,我们拆分的总行数会出现规律性的增长,即 (1+n+n²+n³)*n=n+n²+n³+n^4,其中n为你计算的行数,最大次幂为最大的拆分项。因此当我们的行数越多,并且拆分的项目越多时,我们最后拆分出的项数也会越大,当我们的行数为64行,拆分的项10个时,此时拆分的效率就会非常低。


🎈三、 处理超亿亿。。。亿级别数据量


       如图所示,我们拆分一个项目用了一个小时都没计算出来,后来测试我将所有的缓存区占用了也没计算出来。看来我们直接用上面拆分的办法好像针对这种多行的情况有点行不通了。


10.png


       现实中我们有80-90项,并且至少有几百行,因此如此庞大的数据,最后拆分出来的结果会是超亿亿。。。亿级别,即会比10^64还要多的多。如果我们将10^64定义为不可思议,因此我们将这个拆分结果叫做“太不可思议”吧。因为它是上亿个不可思议组成的。所以,面对我们只有128G内存的服务器来处理这种级别的数据量看来是行不通了,难道只有放弃了嘛?


🎨1、我们思考下?

       我们发现我们拆分单行数据的时候效率还是非常高的,因此我们需要找到统计的最小单元,并且最小单元的行数不能超过10行,不能拆分的计算结果耗时将是你不能接受的。我们思考我们本次的需求为统计每人每天的工作量,因此我们最先想到的是按天为最小维度来统计。即我们先统计昨天的工作量,再来统计今天的工作量。再汇总历史的工作量和今天的工作量就对应是每个人的所有工作量,再取个平均值就可知工作量是否饱和了。


11.png


🎨2、但是这合理吗?

       开始小编也是这么去做的,然而发现数据量还是不小,因为。。。。

12.png


🎨 3、多行转换为单行拆分结果后统计

       因为业务说,这情况就是这样,而且不能改变。因此我去找到了最小单位。即按单行拆分,最终在不到1秒就完成了所有工作量的拆分。最终保存每个检测项目对应日期的人的工作量数据。

13.png


🎨 4、最终效果

14.png


🎨5、解析

       最终拆分通过存储过程的游标循环拆分,将对应拆分明细保存到同一个表中再汇总分析,得出最后的工作量,因太晚了,就暂时不介绍详细的拆分逻辑了。如想获取最终的存储过程拆分逻辑,欢迎留言讨论~  


相关文章
|
7月前
|
SQL Oracle 关系型数据库
Oracle 将表中的数据查出更改某一字段的值后再插入该表
Oracle 将表中的数据查出更改某一字段的值后再插入该表
146 2
|
7月前
|
SQL Oracle 关系型数据库
Oracle之如何限制字段内数据的录入
Oracle之如何限制字段内数据的录入
85 0
|
7月前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
105 0
|
7月前
|
存储 Oracle 关系型数据库
oracle 过滤字段中的中文,不再洋不洋土不土
oracle 过滤字段中的中文,不再洋不洋土不土
162 0
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之同步oracle表时,数据量约800万,检查点异常,该如何排查
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
存储 Oracle 安全
Oracle 12c的不可见字段:数据的“隐形斗篷”
【4月更文挑战第19天】Oracle 12c引入了不可见字段,这是一种隐藏数据列的特性,用于增强数据安全性和实现业务逻辑。不可见字段在常规查询中不显示,但参与数据操作,适合存储敏感信息或内部元数据。创建时只需在列定义中指定“INVISIBLE”属性。虽然有其限制,如特定查询可能暴露,但正确使用能有效提升数据安全性。了解和利用这一功能对数据管理员至关重要。
|
7月前
|
Oracle 关系型数据库 数据安全/隐私保护
oracle 19c 密码字段
oracle 19c 密码字段
66 0
|
7月前
|
Oracle 关系型数据库 数据库
Flink Sink to Oracle 存在字段CLOB类型,如何处理错误”ORA-01461: 仅能绑定要插入LONG的LONG值“
做Flink CDC同步数据过程中,目标是Oracle数据库,其中某个字段较大被设置为CLOB类型,其中会遇到异常,”ORA-01461: 仅能绑定要插入LONG的LONG值“
|
Oracle 关系型数据库
Oracle 根据某个字段获取第一条数据
Oracle 根据某个字段获取第一条数据
|
存储 Oracle 关系型数据库
Oracle——根据拼音首字母模糊查询某个字段
Oracle——根据拼音首字母模糊查询某个字段