使用Oracle外部表对大文件排序 _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1999 | 回复: 0   主题: 使用Oracle外部表对大文件排序         下一篇 
johnnyfox
注册用户
等级:新兵
经验:41
发帖:90
精华:0
注册:2011-12-12
状态:离线
发送短消息息给johnnyfox 加好友    发送短消息息给johnnyfox 发消息
发表于: IP:您无权察看 2015-8-24 14:52:29 | [全部帖] [楼主帖] 楼主

问题:对一个一列两亿行的无序的文本文件进行排序,生成一个排好序的新文本文件。

1. 生成无序文件,BigFileTest.java代码如下:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Random;
publicclass BigFileTest {
      static Random random = new Random();
      publicstaticvoid main (String[] args) throws Exception {
            createFile();
      }
      publicstaticvoid createFile() throws exception {
            BufferedWriter fw = new BufferedWriter(new FileWriter("D:\\BigFileTest\\bigfile.txt"));
            for (int i=1; i<200000000; i++) {
                  fw.write(random.nextLong() + "");
                  fw.newLine();
                  if (i % 10000 == 0) {
                        fw.flush();
                  }
            }
      }
}
javac BigFileTest.java
java BigFileTest


至此生成了一个两亿行的文本文件bigfile.txt

2. 建立外部表

create directory data_dir as'D:\BigFileTest\';
createtable bt_ext_test(a varchar2(30))
organization external
(type oracle_loader
default directory data_dir
access parameters
(records delimited by newline characterset zhs16gbk
badfile data_dir:'bigfile.bad'
discardfile data_dir:'bigfile.dsc'
logfile 'bigfile.log'
fields terminated by 0x'09' ldrtrim
missing field values are null
reject rowswithallnull fields
)
location ('bigfile.txt')
)
parallel
reject limit unlimited;


3. 使用sqlplus的spool生成排序的新文件

set echo off
set feedback off
set termout off
set arrarsize 5000
set heading off
set head off
set trimout on
set pagesize 0
set trimspool on
set ;inesize 30
spool result.txt
select /*+ parallel(bt_ext_test,8) */ * from bt_ext_test orderby a;
spool off
exit;


在4个双核CUP,64位oracle11.2上,用8个并行查询,生成排序文件用时32分钟。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论