每月100W数据统计处理解决方案

任务:每月产生100W条数据(csv格式),要求对这些数据进行一定的统计处理,折腾了几天才比较好地解决,把过程中尝试的各种方法记录下来。

基础数据导入解决思路:
1, 在Excel中用CONCATENATE函数拼出insert sql语句,复制到.sql文件,再拿到plsqldev中执行(由于在plsqldev中执行1个100多W条insert sql语句的文件,执行过程中应用程序会卡住,不知道已经处理了多少数据,放弃)
2, 使用sqlplus @”文件名”来执行sql,并设置每1000条记录提交一次,此时能看到处理数据的百分比,但是同时考虑到因素3,也放弃这个方案
3, 由于Excel中打开并处理50多M的csv文件反应太慢,放弃上述方案
4, 使用sqlldr来插入数据,刚开始时100W条数据大概要几分种
5, 为了加快处理速度,设置sqlldr每2000条记录提交一次而不是默认的64条数据提交一次,效率提升,完成

中间数据插入解决思路:
由于业务原因,需要对上述已经插入的基础数据按照一定业务规则进行分类,求和,评级等操作
1, 继续使用sqlldr来处理数据(sqlldr数据分析功能不够,无法使用)
2, 写select into from语句来执行(执行过程中要很久时间,同时数据出问题时不可控制,放弃)
3, 用python编写程序来先读取后插入数据库,由于使用了oracle的wm_concat函数,返回的结果是clob长文本字段,只能一行一行读取,效率低下
4, 后来发现可以对wm_concat后的项目进行to_char操作,然后可以每10000行数据读取一次,效率大大提高
5, 同时插入的时候也使用executemany方法来进行批处理插入操作,效率大大提升
6, 使用py2exe打包程序,然后copy到生产库执行,完成
7, (中间也试过读取数据后先生成csv文件,然后用sqlldr执行插入操作,发现效率没有明细变化,方便起见,就在python程序中执行插入操作)

查询优化:
为了加快业务分析时的查询效率
1,对相关的年月,省市县等字段建立索引(分区索引)
2,而对于分类代码(100W条数据中只有13个可能的值,同时数据倾斜也比较厉害,最常用的3个代码分别占了大概25W条数据),建立了list分区(对于已分区的字段不要再建立全局索引,建立default分区)
3,建立专门的索引表空间存储索引数据
4,物化视图



你可能感兴趣的:(oracle,sql,python,Excel)