使用rowid抽取数据方法以及大数据量游标卡住的应对

平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来。这种时候,一般来说,

做关联查询:

create table A1 as select A.* from 详单表 A,号码表 B wherea.号码 = b.号码

当然这个语句根据情况不一样有很多中写法,但是,不管是哪种写法,这个语句最大的问题是,如果数据量大,你非常纠结他到底能不能跑完,有时候一个事情,要求2个小时干完,现在跑了1个小时,你说到底要不要结束它另外想办法呢?

所以,这种时候,还是让事情可控一点比较好,首先,还是要考虑a字段的特征,如果a字段并集很大,A有上亿,a字段有几百万,这种时候,我们会给a字段建上索引,比如我要抽取1万个号码的详单,这样写其实就很好:

for x in (select 号码 from Bwhere B.状态="未处理") loop

insert into A1 select * from A where a.号码=x.号码 ;

update B set B.状态=已处理 where B.号码=x.号码 ;

commit ;

end loop;

这样的好处,第一你可以看到执行了多少,进度可控,第二,你随时可以停了他继续。下次启动时,前面做完的他就不会继续做了。

但是,当a字段的并集,不是那么大,而是比较小的时候,比如只有十万的时候, 就不怎么舒服了,因为这种时候索引就没那么管用了。当然你还是可以按照上面的方式那样去做,只是会很慢很慢。所以,这个时候考虑完全做一次全表扫描,实际比索引字段查询多次还要快(为了贴近实际,我把这个字段叫做文件名跟上面的号码区分):

for x in (select rowid,文件名 from A)

select count(1) into cc from B where B.文件名=x.文件名 ;

if cc >= 1 then

insert into A1 select * from A where A.rowid=x.rowid;

commit ;

end if ;

end loop;

上面语句中,其实这么写是偷懒的做法,因为要插一条记录去新表A1中,理想的办法当然是在游标中读取所有字段,然后直接insert 到A1中,用insert into A1 values这种,如果写成insert into A1 select * from A where A.rowid=x. rowid会增加IO,实际上,rowid定位一行数据是极快的方法(不管你表有多大,都是一样的效率),这种写法根本不会比insert into A1 values 慢多少。

再次但是,这种场景下,其实是容易出问题,问题出在这个数据量很大,且记录不怎么连续的时候,当记录不怎么连续时,游标fentch到越后面,就越慢。一个亿的记录,没准在几百万的时候就卡住了。出现问题的原因,还是因为记录不够连续,导致寻址变慢,解决的办法,就是重建这个表(或者对这个表做表分析)。

再次再次但是,上亿的表,做表分析也好,还是重建,都不容易,可能重建个几个小时还是建不出来,而且浪费空间。所以,上面那个是想偷懒少些字段的逻辑,就变成了必然,我们考虑重建表的时候,只需要两个字段:

create table A1的映射 nolloggingas select rowid as rrowid , 文件名 from A ;

for x in (select rrowid,文件名 from A1的映射)

select count(1) into cc from B where B.文件名=x.文件名 ;

if cc >= 1 then

insert into A1 select * from A where A.rowid=x.rrowid;

commit ;

end if ;

end loop;

重建表的时候,只用两个字段,可以大大减少重建的时间(create table 其实是获取的数据量越大越慢,还不是线性的,是几何增长的)。然后游标使用新的重建表,读取rowid字段(已经改为了rrowid),在根据获取到的rowid去实际表中获取数据。

要不怎么说,这个世界是懒人推动的呢?

时间: 2024-10-07 22:38:49

使用rowid抽取数据方法以及大数据量游标卡住的应对的相关文章

网络天然是大数据的,大数据天然是网络的

The network is naturally bigdataing, while bigdata is inherently networking. [email protected] 用英文表达似乎更加准确一些. 计算机科学发展了半个世纪,而网络的出现极大推动了计算机相关技术的爆发式进步. 计算机或网络领域所研究的典型问题,往往都是追求高性能.精确.准确,而大数据技术则往往提供一些统筹.模糊的结论. 一方面,网络中产生了海量的数据,无法被传统技术处理而白白浪费:反过来,要实现大数据处理的平

分类推荐&通俗易懂 :数据科学与大数据技术专业领域的实用工具

数据科学与大数据技术是一门偏向应用的学科领域,因此工具就成为重要的组成部分.在工作中,数据科学家如果选择有效的工具会带来事半功倍的效果.一般来说,数据科学家应该具有操作数据库.数据处理和数据可视化等相关技能,还有很多人还认为计算机技能也是不可或缺的,可以提高数据科学家工作的效率. 在这里相信有许多想要学习大数据的同学,大家可以+下大数据学习裙:957205962,即可免费领取套系统的大数据学习教程 开源社区多年来对数据科学工具包开发有着巨大贡献,这也让数据科学领域得以不断进步.这里我们收集了一些

【云端大数据实战】大数据误区、大数据处理步骤分析

1.背景 首先感谢这次博客的主办方CSDN以及在初赛为我投票的网友们,你们的支持是Garvin前进的动力.本文思路的依据来源于本次天猫大数据竞赛长达三个月的参赛体验.博主作为一个在校的学生,可能如果不是这次比赛,很难能够拥有一套完整的云环境来对TB级的数据进行分析和实践.下面是博主的一点心得,在此抛砖引玉,希望能给大家在云端大数据处理方面带来一点启示. 2.对于大数据和云的一些误区 (1)误区一:云的计算能力是无穷的,不用考虑效率? 我们都知道,云计算的本质就是分布式计算,将现有的工作量,分割开

大数据数据仓库-基于大数据体系构建数据仓库(Hive,Flume,Kafka,Azkaban,Oozie,SparkSQL)

背景 接着上个文章数据仓库简述,想写一篇数据仓库常用模型的文章,但是自己对数据仓库模型的理解程度和建设架构并没有下面这个技术专家理解的深刻,并且自己去组织语言,可能会有不准确的地方,怕影响大家对数据仓库建模的理解,数据仓库属于一个工程学科,在设计上要体验出工程严谨性,所以这次向大家推荐这篇文章,毕竟IBM在数据仓库和数据集市方面已经做得很成熟了,已经有成型的商业数据仓库组件,这篇文章写的很好,可以让大家很好的理解数据仓库. 版权 作者 周三保([email protected]) IBM 软件部

第二篇:智能电网(Smart Grid)中的数据工程与大数据案例分析

前言 上篇文章中讲到,在智能电网的控制与管理侧中,数据的分析和挖掘.可视化等工作属于核心环节.除此之外,二次侧中需要对数据进行采集,数据共享平台的搭建显然也涉及到数据的管理.那么在智能电网领域中,数据工程到底是如何实施的呢? 本文将以IBM的Itelligent Utility Network产品为例阐述智能电网中的数据工程,它是IBM声称传统电网向智能电网转变的整体方案(看过上篇文章的童鞋想必会清楚这样的说法是片面狭隘的,它只能算是智能电网中的数据工程). 另一方面,如今是一个数据爆炸的时代,

云大数据实战记录-大数据推荐

前言 WHY 云:为什么我们须要云.大数据时代我们面对两个问题,一个是大数据的存储.一个是大数据的计算. 由于数据量过大,在单个终端上运行效率过差,所以人们用云来解决这两个问题. WHAT IS 云:云得益于分布式计算的思想.举个简单的样例.运行一千万个数据每一个数据都乘以10并输出,在个人pc上须要大概20分钟.假设是100台电脑做这个工作.可能仅仅用几十秒就能够完毕.云就是我们将复杂的工作通过一定的算法分配给云端的n个server,这样能够大大提高运算效率. How 云:云的实现也就是分步式

大数据分析师和大数据工程师职位,孰轻孰重(个人角度)

在互联网盛行的今天,能够预测未来需要依靠更多数据支持,从数据的趋势和分析中,就可以把未来的发展动向掌握得淋漓尽致.在大数据背景之下,精通大数据的专业人才将成为企业最重要的业务角色,大数据从业人员薪酬持续增长,人才缺口巨大. 最近在回答粉丝问题中,我发现一个问题:很多人对于大数据的职位体系不了解,一些对于想入门与大数据的人一直处于迷茫阶段,不知道自己该不该转行学习大数据,不知道自己是否要转大数据专业,这里就给大家分析一下( 个人观点) 数据分析师指的是不同行业中,专门从事行业数据搜集.整理.分析,

打通感知与认知,明略数据还要做大数据知识工程

(上图为明略数据创始人吴明辉) 作为国内行业知识图谱领域的创新公司,明略数据在2018年4月进入了IDC的<中国知识图谱市场,2018>创新者研究报告,成为IDC评选出的5家中国知识图谱技术应用市场创新者.2017年8月,明略数据经过3年实践沉淀以及8年大数据技术积累,首次发布了基于知识图谱的行业人工智能大脑-明智系统1.0. 2018年9月7日,明略数据举办了2018年度产品发布会,即"行业AI大脑明智系统2.0",这是对1.0版本的产品技术体系全面升级.明智系统2.0在

大数据技术#1 大数据技术生态体系

什么是大数据 ? 关于大数据麦肯锡全球研究所给出的定义是:一种规模大到在获取.存储.管理.分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模.快速的数据流转.多样的数据类型和价值密度低四大特征. ? 所谓的大数据生态系统简单可以理解成集成了大数据的存储和计算以及分析等常见技能于一身的技术框架,可以简单理解为:存储+计算+任务调度.比如目前主流的 Hadoop 生态系统和 Spark 生态系统.Hadoop 自身提供了 HDFS 用来数据存储,提供了 MapReduce 用