前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Oracle外部表对大文件排序

使用Oracle外部表对大文件排序

作者头像
用户1148526
发布2019-05-25 19:46:56
6770
发布2019-05-25 19:46:56
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1433235

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

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

java view plain copy

  1. import java.io.BufferedWriter;
  2. import java.io.FileWriter;
  3. import java.util.Random;
  4. public class BigFileTest {
  5. static Random random = new Random();
  6. public static void main (String[] args) throws Exception {
  7. createFile();
  8. }
  9. public static void createFile() throws exception {
  10. BufferedWriter fw = **new** BufferedWriter(**new** FileWriter("D:\\BigFileTest\\bigfile.txt"));
  11. for (int i=1; i<200000000; i++) {
  12. fw.write(random.nextLong() + "");
  13. fw.newLine();
  14. if (i % 10000 == 0) {
  15. fw.flush();
  16. }
  17. }
  18. }
  19. }

javac BigFileTest.java

Java BigFileTest

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

  1. 建立外部表

sql view plain copy

  1. create directory data_dir as 'D:\BigFileTest\';
  2. create table bt_ext_test(a varchar2(30))
  3. organization external
  4. (type oracle_loader
  5. default directory data_dir
  6. access parameters
  7. (records delimited by newline characterset zhs16gbk
  8. badfile data_dir:'bigfile.bad'
  9. discardfile data_dir:'bigfile.dsc'
  10. logfile 'bigfile.log'
  11. fields terminated by 0x'09' ldrtrim
  12. missing field values are null
  13. reject rows with all null fields
  14. )
  15. location ('bigfile.txt')
  16. )
  17. parallel
  18. reject limit unlimited;
  19. 使用sqlplus的spool生成排序的新文件

sql view plain copy

  1. set echo off
  2. set feedback off
  3. set termout off
  4. set arrarsize 5000
  5. set heading off
  6. set head off
  7. set trimout on
  8. set pagesize 0
  9. set trimspool on
  10. set ;inesize 30
  11. spool result.txt
  12. select /*+ parallel(bt_ext_test,8) */ * from bt_ext_test order by a;
  13. spool off
  14. exit;

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档