`
teamojiao
  • 浏览: 350378 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Db2测试单表插入速度一段通用程序

阅读更多

首先,还是通过export命令将某表数据导出为del格式
-- Start of generated script for 192.168.0.85-INFO85-INFOSPY (db2inst1)
--  Oct-11-2008 at 14:53:28

EXPORT TO 'C:\DATA_WHITELISTS_R.del' OF DEL
  SELECT * FROM "DB2INST1"."DATA_WHITELISTS_R";

#SYNC 10;

 

-- End of generated script for 192.168.0.85-INFO85-INFOSPY (db2inst1)
通过以下程序,将这个del格式的数据进行分离

 

# -*- coding: cp936 -*-
#===============================================================================
#开发需求:与数据时间片分析工具共同使用,该程序主要用来分析数据表del文件
#1.可将del数据源文件,按照时间分割为新的数据文件
#2.可将del数据源文件,按字定义大小进行分割split_record
#===============================================================================
import os,time
#需要分析的del文件名
DelName = "DATA_ALARM_BA.del"
path = os.getcwd()+"\%s" % (DelName)
#分析后的输出路径
os.system("mkdir Analyse")
analyse_path = os.getcwd()+r"\Analyse"
#每个文件分割的大小
split_record = 10000
#需要分析的时间字段,比如是按del第4列数据,进行日期数据分割
split_filed = 4
DataObject = open(path,'r')
Data_List = DataObject.readlines()
print "共需要转换的总次数:",int(len(Data_List)/split_record),"表总数:",int(len(Data_List))
for i in range(len(Data_List)):
    datatime = ""
    for y in Data_List[i].split(',')[split_filed][1:11].split('-'):
        datatime += y
        global temp
        temp = datatime
    if int(datatime)-int(temp) <> 0:
        print os.getcwd()
        os.system("md Analyse\\%s" % (datatime))
        newpath = "%s\\%s\\%s%s_%s.del" % (analyse_path,datatime,DelName[:-4],temp,str("%04d" % (i/split_record)))
        list = open(newpath,'a')
        list.writelines(Data_List[i])
    else:
        print os.getcwd()
        print temp
        os.system("md Analyse\\%s" % (temp))
        newpath = "%s\\%s\\%s%s_%s.del" % (analyse_path,temp,DelName[:-4],datatime,str("%04d" % (i/split_record)))
        list = open(newpath,'a')
        list.writelines(Data_List[i])
print "转化成功"

将上段py脚本与导出DATA_ALARM_BA.del文件放置在一个目录下,分析后会创建Analyse目录

请将数据,进行手工分离:

在Analyse目录下创建时间格式为2008-10-10为例的文件夹,将分离后的分析数据归档

 

使用以下脚本开始分析数据:需要自行定义以下参数:

#1.设定一个分析时间片,单位为分钟,AnalyseTimeArea,默认为5分钟
#2.可设定需要分析数据库表所在字段,AnalyseField,默认为第四个字段(时间字段请确认)

 

#!/usr/bin/env python
#-*- coding: cp936 -*-
#===============================================================================
#开发需求:与数据分离工具共同使用,该程序主要用来分析单位时间的单表入库平均值
#1.设定一个分析时间片,单位为分钟,AnalyseTimeArea
#2.可设定需要分析数据库表所在字段,AnalyseField
#===============================================================================
import threading,os,time

class ReadConfig():

    def Base_Config(self):

        #配置话单路径
        TelPath = os.getcwd()+"\\Analyse"
        #print TelPath
        return TelPath


class GetPath(ReadConfig):

    def Get_Path(self):

        #获取路径下分析文件,建立字典
        dict = {}
        dir_temp = []
        file_temp = []
        basepath = self.Base_Config()
        #print basepath
        for root, dirs, files in os.walk(self.Base_Config()):
            #获取文件夹节点,获取文件夹对应文件
            for dir in dirs:
                dir_temp.append(dir)
        dir_temp.sort()
        for i in dir_temp:
            #print self.Base_Config()+"\\"+str(i)
            for root, dirs, files in os.walk(self.Base_Config()+"\\"+str(i)):
                #获取对应文件夹下的数据
                file_temp.append(files)
        for i in range(len(dir_temp)):
            #建立数据字典
            dict[dir_temp[i]] = file_temp[i]
        return basepath,dict

class ThreadMain(threading.Thread,GetPath):

    def __init__(self):

        #设定一个分析时间片,单位为分钟
        self.AnalyseTimeArea = 5
        #需要分析数据库表所在字段
        self.AnalyseField = 4
        basepath,dict = self.Get_Path()
        #print basepath,dict
        self.dict = dict
        self.basepath = basepath

    def Thread_Contorl(self):

        #读取字典的索引,索引为文件夹节点self.dict.keys()[i]
        self.Add_Tel_Path_temp2 = []
        #print self.dict.keys()
        for i in range(len(self.dict.keys())):
            self.Add_Tel_Path_temp1 = []
            #print self.dict.keys()[i],self.dict[self.dict.keys()[i]]
            for y in range(len(self.dict[self.dict.keys()[i]])):
                #print self.dict.keys()[i],self.dict[self.dict.keys()[i]]
                #print len(self.dict[self.dict.keys()[i]])
               self.Add_Tel_Path =  self.basepath+"\\"+self.dict.keys()[i]+"\\"+self.dict[self.dict.keys()[i]][y]
               self.Add_Tel_Path_temp1.append(self.Add_Tel_Path)
            #print Add_Tel_Path_temp1
            self.Add_Tel_Path_temp2.append(self.Add_Tel_Path_temp1)
        #Add_Tel_Path_temp2得到已文件夹节点分类数组,格式如下[[2008-3-8],[2008-3-10],[2008-3-9]]
        return self.Add_Tel_Path_temp2

    #================================================================================
    # 已文件夹为单位进行时间分割计算每日的话单总流量
    # Method Name:AnalyseMethod_Countdayflow
    # Author:xinkai Add:2008-3-10
    #================================================================================
    def AnalyseMethod_Countdayflow(self):

        self.CountFlow = 0
        #由线程类获得分析数组
        self.AnalyseList = self.Thread_Contorl()
        #print AnalyseList
        for i in range(len(self.AnalyseList)):
            #print self.dict.keys()[i],AnalyseList[i]
            #===============================================================================
            #            此处需要加判断日期以及有效话单
            #===============================================================================
            for y in range(len(self.AnalyseList[i])):
                #print AnalyseList[i][y]
                self.AnalyseData = open(self.AnalyseList[i][y],'r')
                #self.CountFlow += len(self.AnalyseData.readlines())
                print "执行过程[ %s ]:第%s文件大小为%s文件" % (self.dict.keys()[i],y,len(self.AnalyseData.readlines()))
                self.CountFlow += len(self.AnalyseData.readlines())
                #print self.dict.keys()[i]+str(len(AnalyseData.readlines()))+"\n"
            #print "[",self.dict.keys()[i]+" ]当日数据总流量为:"+str(self.CountFlow)

    #================================================================================
    # 已文件夹为单位进行时间分割按照划定的时间片对每日话单分时流量进行统计
    # Method Name:AnalyseMethod_CountTimeFlow
    # Author:xinkai Add:2008-3-10
    #================================================================================
    def AnalyseMethod_CountTimeFlow(self):

        #Analyse_CountTimeFlow = open('Analyse_CountTimeFlow.log','w')
        #由线程类获得分析数组
        self.AnalyseList = self.Thread_Contorl()
        for i in range(len(self.AnalyseList)):
            temp = []
            self.AnalyseStack = []
            self.AnalyseStackSend = []
            for y in range(len(self.AnalyseList[i])):
                #已时间文件夹为分割点,分类读取话单进行分析
                #用来计算每个文件中每个话单记录的时间堆栈
                self.AnalyseData = open(self.AnalyseList[i][y],'r')
                self.AnalyseStackSend.append(self.AnalyseData.readlines())
                #用来计算基础时间轴的堆栈AnalyseStack
                self.AnalyseData = open(self.AnalyseList[i][y],'r')
                self.AnalyseStack.append(self.AnalyseData.readlines()[0])
            #已文件夹时间点分割,获取基础时间轴
            self.BaseTimeCenter = self.AnalyseStack[0].split(',')[self.AnalyseField]
            #转化话单发送时间为整数
            self.ChangeBaseTime = self.ChageTime(self.BaseTimeCenter)
            for h in range(len(self.AnalyseList[i])):
                for z in self.AnalyseStackSend[h]:
                    self.TelTime = self.ChageTime(z.split(',')[self.AnalyseField])
                    #print str(self.TelTime)+"//\\"+str(self.ChangeBaseTime)
                    import math
                    #获得已基础时间为轴的时间差值
                    #print int(math.fabs(self.TelTime - self.ChangeBaseTime))/60
                    temp.append((int(math.fabs(self.TelTime - self.ChangeBaseTime))/60) / self.AnalyseTimeArea)
            #Analyse_CountTimeFlow.writelines("话单时间:%s\n初始时间片    时间片    分时流量\n" % (self.dict.keys()[i]))
            #Analyse_CountTimeFlow.close()
            print self.BaseTimeCenter[1:11]
            for j in range(1440/int(self.AnalyseTimeArea)):
                if temp.count(j) <> 0:
                    #Analyse_CountTimeFlow = open('Analyse_CountTimeFlow.log','a')
                    print "分析日期:%s ; 分析时间片:%s分钟 ; 第%s时间片 ; 分时流量为%s条 ;" % (self.BaseTimeCenter[1:11],self.AnalyseTimeArea,j,temp.count(j))
                    #Analyse_CountTimeFlow.writelines("%s    %s    %s\n" % (self.AnalyseTimeArea,j,temp.count(j)))

    def ChageTime(self,datatime):

        #初始化变量
        self.YearMD = ""
        self.TimeCS = ""

        #引用时间参数
        self.datatime = datatime
        self.SplitDataTime2 = self.datatime[1:11].split('-')
        self.SplitDataTime3 = self.datatime[12:20].split('.')
        #分割结果['2008', '03', '10'] ['11', '18', '18']

        #组合分割数据转换时间为整数
        for i in self.SplitDataTime2:
            self.YearMD += i
        for h in self.SplitDataTime3:
            self.TimeCS += h
        self.newTime = self.YearMD + self.TimeCS
        return int(self.newTime)

    def __del__(self):
        pass

class ControlThread(ThreadMain):

    def __init__(self):

        basepath,dict = self.Get_Path()
        self.dict = dict
        self.basepath = basepath

    def Control_Thread(self):

        #控制使用分析线程
        print "-----------------------------------------"
        ObjectThread = ThreadMain()
        print "开始计算每日流量:"
        ObjectThread.AnalyseMethod_Countdayflow()
        print "计算结束"
        print "-----------------------------------------"
        import time
        time.sleep(0.01)
        print "开始计算分时流量:"
        ObjectThread.AnalyseMethod_CountTimeFlow()
        print "计算结束"
        print "-----------------------------------------"

if __name__ == "__main__":

    ObjectControl = ControlThread()
    ObjectControl.Control_Thread()
    #path = ReadConfig(path)

这里的重点,你可以根据自己数据的特点,重新定义。

        self.SplitDataTime2 = self.datatime[1:11].split('-')
        self.SplitDataTime3 = self.datatime[12:20].split('.')
        #分割结果['2008', '03', '10'] ['11', '18', '18']
 

运行程序后,会生成以下日志:

 

分析后数据如下:
-----------------------------------------
开始计算每日流量:
执行过程[ 20080930 ]:第0文件大小为4文件
执行过程[ 20080929 ]:第0文件大小为103文件
计算结束
-----------------------------------------
开始计算分时流量:
2008-09-30
分析日期:2008-09-30 ; 分析时间片:5分钟 ; 第0时间片 ; 分时流量为4条 ;
2008-09-29
分析日期:2008-09-29 ; 分析时间片:5分钟 ; 第0时间片 ; 分时流量为95条 ;
分析日期:2008-09-29 ; 分析时间片:5分钟 ; 第1时间片 ; 分时流量为4条 ;
分析日期:2008-09-29 ; 分析时间片:5分钟 ; 第2时间片 ; 分时流量为4条 ;
计算结束
-----------------------------------------

 

分享到:
评论

相关推荐

    IBM_DB2通用数据库SQL入门

    ### IBM_DB2通用数据库SQL入门知识点总结 #### 第一章 DB2的概貌 ##### 1.1 文件系统特点 - **数据独立性差**:数据的物理存储位置与应用程序紧密耦合,导致数据结构变化时需修改大量代码。 - **冗余度大**:同一...

    IBM DB2通用数据库SQL入门(PDF)

    IBM DB2通用数据库SQL入门教程是针对初学者设计的一份宝贵资源,旨在帮助读者掌握如何在IBM DB2数据库系统中运用SQL(结构化查询语言)进行数据管理。SQL是数据库管理和分析的核心工具,广泛应用于数据查询、更新、...

    IBM DB2通用数据库SQL入门

    IBM DB2通用数据库系统是IBM公司推出的一款高性能、企业级的关系型数据库管理系统(RDBMS),广泛应用于数据存储、分析和事务处理等场景。对于初学者来说,掌握IBM DB2的SQL基础是至关重要的,因为SQL(Structured ...

    oracle学习

    关系型数据库(Relational Database, RDB)是一种基于表格形式的数据库,通过二维表结构来组织和存储数据。关系型数据库的特点在于其数据的组织方式,即数据是以表格的形式存储的,每个表格都有明确的列名和行值。...

    oracle实用教程

    PL/SQL支持多种条件控制语句(如IF-THEN-ELSE、CASE等)和循环控制语句(如LOOP、WHILE-LOOP等),用于根据不同的条件执行不同的代码路径或重复执行一段代码。 **PL/SQL中动态执行SQL语句** 通过使用EXECUTE ...

    计算机专业考试范围.docx

    - 特点:速度快、准确性高、存储容量大、逻辑判断能力强等。 - 分类:根据用途分为通用计算机和专用计算机;根据规模分为巨型计算机、大型计算机、小型计算机、微型计算机和个人计算机等。 2. **计算机系统组成**...

    通信术语中英对照词典

    1. **(表记录的)插入修改添加删除** - **中文**: 插入修改添加删除 - **英文**: Insert Modify, Update Add Delete (IMUAD) - **解释**: 在数据库或数据表中对记录进行的基本操作,包括插入(new records)、修改...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    组成:表空间、段、区、块的组成层次 六、 oracle安装、卸载和启动  硬件要求 物理内存:1GB 可用物理内存:50M 交换空间大小:3.25GB 硬盘空间:10GB  安装 1. 安装程序成功下载,将会得到如下2个文件: ...

    Javaweb最新全套项目实战视频教程-MySQL课件

    ODBC是另一种数据库访问接口,为不同SQL数据库提供了通用接口,但Java开发者通常更倾向于使用JDBC,因为它与Java语言更紧密集成。 在MySQL的安装与配置环节,我们需要卸载旧版本,然后下载适合的MySQL版本(通常是...

    经典sql数据库语句

    ` 这段代码创建了一个磁盘备份设备,并对名为`pubs`的数据库进行了备份。 4. **创建新表**:`CREATE TABLE tabname (col1 type1 [NOT NULL] [PRIMARY KEY], col2 type2 [NOT NULL], ...)` 用于创建新表,`tabname`...

    可慧内容管理系统

    用户查禁系统,可以对用户根据IP,名字,邮件地址,文章内容等进行查禁,支持自动查禁功能,当用户发表的内容包含某些字词时系统会自动封锁此用户的发表权限一段时间。 支持多种语言,可以方便的将系统更改为...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    - **支持多种数据库:**MyBatis支持多种数据库,如MySQL、Oracle、DB2等。 - **与Spring集成良好:**MyBatis可以轻松地与Spring框架集成,实现事务管理等功能。 **3. MyBatis框架的缺点:** - **SQL管理分散:**...

Global site tag (gtag.js) - Google Analytics