Oracle的pipelined函数实现高性能大数据处理
在plsql开发中,会涉及到一些大数据量表的数据处理,如将某记录数超亿的表的记录经过处理转换插入到另外一张或几张表。
常规的操作方法固然可以实现,但时间、磁盘IO、redo日志等等都非常大。Oracle 提供了一种高级函数,可以将这种数据处理的性能提升到极限。这种函数称为管道函数。
在实际项目中,管道函数会和表函数、数据流函数(即表函数和CURSOR结合)、数据集合、并行度一起使用,达到大数据处理的性能顶峰。
下面是一个例子,将表t_ss_normal的记录插入到表t_target中,插入过程中有部分转换操作。
我分成四个方法来实现这个数据处理操作。
第一个方法,也是最常规的方法,代码如下:
- create table T_SS_NORMAL
 - (
 - owner VARCHAR2(30),
 - object_name VARCHAR2(128),
 - subobject_name VARCHAR2(30),
 - object_id NUMBER,
 - data_object_id NUMBER,
 - object_type VARCHAR2(19),
 - created DATE,
 - last_ddl_time DATE,
 - timestamp VARCHAR2(19),
 - status VARCHAR2(7),
 - temporary VARCHAR2(1),
 - generated VARCHAR2(1),
 - secondary VARCHAR2(1)
 - );
 - /
 - create table T_TARGET
 - (
 - owner VARCHAR2(30),
 - object_name VARCHAR2(128),
 - comm VARCHAR2(10)
 - );
 
这是源表和目标表的表结构。现在源表有200W条,其数据来自dba_objects视图。
- create or replace package pkg_test is
 - procedure load_target_normal;
 - end pkg_test;
 - create or replace package body pkg_test is
 - procedure load_target_normal is
 - begin
 - insert into t_target (owner, object_name, comm)
 - select owner, object_name, 'xxx' from t_ss_normal;
 - commit;
 - end;
 - begin
 - null;
 - end pkg_test;
 
一个insert into select语句搞定这个数据处理,简单。
相关推荐
  IT之家    2020-03-11  
   SXIAOYI    2020-09-16  
   jinhao    2020-09-07  
   impress    2020-08-26  
   liuqipao    2020-07-07  
   淡风wisdon大大    2020-06-06  
   yoohsummer    2020-06-01  
   chenjia00    2020-05-29  
   baike    2020-05-19  
   扭来不叫牛奶    2020-05-08  
   hxmilyy    2020-05-11  
   黎豆子    2020-05-07  
   xiongweiwei00    2020-04-29  
   Cypress    2020-04-25  
   冰蝶    2020-04-20