sqlldr处理格式化数据

来源:互联网 发布:自然共和国怎么样知乎 编辑:程序博客网 时间:2024/06/05 12:47
 server每天都产生一大批日志需要导入test数据库user用户下。本来想在机器上用shell直接分析,但是量太大了,一天1千多万条,不方便统计汇总,用sqlldr导入比较方便。就拿来用了。

sqlldr主要用了direct=true的选项,速度和不用没法比。^_^,1个文件100多万条记录就几秒钟。

-- 每天code统计表
create table code_stat(pid VARCHAR2(32),CODE VARCHAR2(32),status VARCHAR2(2));

-- 汇总表

create table code_stat_sum(stat_day VARCHAR2(8),CODE VARCHAR2(32),COUNT NUMBER(24));

sqlldr的control file
stdo.ctl
##############################
load data
APPEND INTO TABLE code_stat
(pid char(32) terminated by ']',
code char(32) terminated by whitespace,
status char(32) terminated by whitespace)
##############################

data从命令行输入


for i in `ls data/info.out.20081211*`;do
echo ===`wc -l $i`===
sqlldr userid=user/password@test control=stdo.ctl data=$i log=stdo.log bad=bad.log direct=true
done

sqlplus user/password@test<<!
INSERT INTO code_stat_sum SELECT '20081211', code, COUNT(*) FROM code_stat WHERE status='B' GROUP BY code;
commit;
exit
!

# backup current table to history table, create a new one.
sqlplus user/password@test<<!
RENAME code_stat TO code_stat_20081211;
create table code_stat(pid VARCHAR2(32),code VARCHAR2(32),status VARCHAR2(2));
commit;
exit
!
原创粉丝点击