`
weimou66
  • 浏览: 1246425 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
首先,还是通过export命令将某表数据导出为del格式
  1. --Startofgeneratedscriptfor192.168.0.85-INFO85-INFOSPY(db2inst1)
  2. --Oct-11-2008at14:53:28
  3. EXPORTTO'C:/DATA_WHITELISTS_R.del'OFDEL
  4. SELECT*FROM"DB2INST1"."DATA_WHITELISTS_R";
  5. #SYNC10;
  6. --Endofgeneratedscriptfor192.168.0.85-INFO85-INFOSPY(db2inst1)

通过以下程序,将这个del格式的数据进行分离

  1. #-*-coding:cp936-*-
  2. #===============================================================================
  3. #开发需求:与数据时间片分析工具共同使用,该程序主要用来分析数据表del文件
  4. #1.可将del数据源文件,按照时间分割为新的数据文件
  5. #2.可将del数据源文件,按字定义大小进行分割split_record
  6. #===============================================================================
  7. importos,time
  8. #需要分析的del文件名
  9. DelName="DATA_ALARM_BA.del"
  10. path=os.getcwd()+"/%s"%(DelName)
  11. #分析后的输出路径
  12. os.system("mkdirAnalyse")
  13. analyse_path=os.getcwd()+r"/Analyse"
  14. #每个文件分割的大小
  15. split_record=10000
  16. #需要分析的时间字段,比如是按del第4列数据,进行日期数据分割
  17. split_filed=4
  18. DataObject=open(path,'r')
  19. Data_List=DataObject.readlines()
  20. print"共需要转换的总次数:",int(len(Data_List)/split_record),"表总数:",int(len(Data_List))
  21. foriinrange(len(Data_List)):
  22. datatime=""
  23. foryinData_List[i].split(',')[split_filed][1:11].split('-'):
  24. datatime+=y
  25. globaltemp
  26. temp=datatime
  27. ifint(datatime)-int(temp)<>0:
  28. printos.getcwd()
  29. os.system("mdAnalyse//%s"%(datatime))
  30. newpath="%s//%s//%s%s_%s.del"%(analyse_path,datatime,DelName[:-4],temp,str("%04d"%(i/split_record)))
  31. list=open(newpath,'a')
  32. list.writelines(Data_List[i])
  33. else:
  34. printos.getcwd()
  35. printtemp
  36. os.system("mdAnalyse//%s"%(temp))
  37. newpath="%s//%s//%s%s_%s.del"%(analyse_path,temp,DelName[:-4],datatime,str("%04d"%(i/split_record)))
  38. list=open(newpath,'a')
  39. list.writelines(Data_List[i])
  40. print"转化成功"

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

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

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

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

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

  1. #!/usr/bin/envpython
  2. #-*-coding:cp936-*-
  3. #===============================================================================
  4. #开发需求:与数据分离工具共同使用,该程序主要用来分析单位时间的单表入库平均值
  5. #1.设定一个分析时间片,单位为分钟,AnalyseTimeArea
  6. #2.可设定需要分析数据库表所在字段,AnalyseField
  7. #===============================================================================
  8. importthreading,os,time
  9. classReadConfig():
  10. defBase_Config(self):
  11. #配置话单路径
  12. TelPath=os.getcwd()+"//Analyse"
  13. #printTelPath
  14. returnTelPath
  15. classGetPath(ReadConfig):
  16. defGet_Path(self):
  17. #获取路径下分析文件,建立字典
  18. dict={}
  19. dir_temp=[]
  20. file_temp=[]
  21. basepath=self.Base_Config()
  22. #printbasepath
  23. forroot,dirs,filesinos.walk(self.Base_Config()):
  24. #获取文件夹节点,获取文件夹对应文件
  25. fordirindirs:
  26. dir_temp.append(dir)
  27. dir_temp.sort()
  28. foriindir_temp:
  29. #printself.Base_Config()+"//"+str(i)
  30. forroot,dirs,filesinos.walk(self.Base_Config()+"//"+str(i)):
  31. #获取对应文件夹下的数据
  32. file_temp.append(files)
  33. foriinrange(len(dir_temp)):
  34. #建立数据字典
  35. dict[dir_temp[i]]=file_temp[i]
  36. returnbasepath,dict
  37. classThreadMain(threading.Thread,GetPath):
  38. def__init__(self):
  39. #设定一个分析时间片,单位为分钟
  40. self.AnalyseTimeArea=5
  41. #需要分析数据库表所在字段
  42. self.AnalyseField=4
  43. basepath,dict=self.Get_Path()
  44. #printbasepath,dict
  45. self.dict=dict
  46. self.basepath=basepath
  47. defThread_Contorl(self):
  48. #读取字典的索引,索引为文件夹节点self.dict.keys()[i]
  49. self.Add_Tel_Path_temp2=[]
  50. #printself.dict.keys()
  51. foriinrange(len(self.dict.keys())):
  52. self.Add_Tel_Path_temp1=[]
  53. #printself.dict.keys()[i],self.dict[self.dict.keys()[i]]
  54. foryinrange(len(self.dict[self.dict.keys()[i]])):
  55. #printself.dict.keys()[i],self.dict[self.dict.keys()[i]]
  56. #printlen(self.dict[self.dict.keys()[i]])
  57. self.Add_Tel_Path=self.basepath+"//"+self.dict.keys()[i]+"//"+self.dict[self.dict.keys()[i]][y]
  58. self.Add_Tel_Path_temp1.append(self.Add_Tel_Path)
  59. #printAdd_Tel_Path_temp1
  60. self.Add_Tel_Path_temp2.append(self.Add_Tel_Path_temp1)
  61. #Add_Tel_Path_temp2得到已文件夹节点分类数组,格式如下[[2008-3-8],[2008-3-10],[2008-3-9]]
  62. returnself.Add_Tel_Path_temp2
  63. #================================================================================
  64. #已文件夹为单位进行时间分割计算每日的话单总流量
  65. #MethodName:AnalyseMethod_Countdayflow
  66. #Author:xinkaiAdd:2008-3-10
  67. #================================================================================
  68. defAnalyseMethod_Countdayflow(self):
  69. self.CountFlow=0
  70. #由线程类获得分析数组
  71. self.AnalyseList=self.Thread_Contorl()
  72. #printAnalyseList
  73. foriinrange(len(self.AnalyseList)):
  74. #printself.dict.keys()[i],AnalyseList[i]
  75. #===============================================================================
  76. #此处需要加判断日期以及有效话单
  77. #===============================================================================
  78. foryinrange(len(self.AnalyseList[i])):
  79. #printAnalyseList[i][y]
  80. self.AnalyseData=open(self.AnalyseList[i][y],'r')
  81. #self.CountFlow+=len(self.AnalyseData.readlines())
  82. print"执行过程[%s]:第%s文件大小为%s文件"%(self.dict.keys()[i],y,len(self.AnalyseData.readlines()))
  83. self.CountFlow+=len(self.AnalyseData.readlines())
  84. #printself.dict.keys()[i]+str(len(AnalyseData.readlines()))+"/n"
  85. #print"[",self.dict.keys()[i]+"]当日数据总流量为:"+str(self.CountFlow)
  86. #================================================================================
  87. #已文件夹为单位进行时间分割按照划定的时间片对每日话单分时流量进行统计
  88. #MethodName:AnalyseMethod_CountTimeFlow
  89. #Author:xinkaiAdd:2008-3-10
  90. #================================================================================
  91. defAnalyseMethod_CountTimeFlow(self):
  92. #Analyse_CountTimeFlow=open('Analyse_CountTimeFlow.log','w')
  93. #由线程类获得分析数组
  94. self.AnalyseList=self.Thread_Contorl()
  95. foriinrange(len(self.AnalyseList)):
  96. temp=[]
  97. self.AnalyseStack=[]
  98. self.AnalyseStackSend=[]
  99. foryinrange(len(self.AnalyseList[i])):
  100. #已时间文件夹为分割点,分类读取话单进行分析
  101. #用来计算每个文件中每个话单记录的时间堆栈
  102. self.AnalyseData=open(self.AnalyseList[i][y],'r')
  103. self.AnalyseStackSend.append(self.AnalyseData.readlines())
  104. #用来计算基础时间轴的堆栈AnalyseStack
  105. self.AnalyseData=open(self.AnalyseList[i][y],'r')
  106. self.AnalyseStack.append(self.AnalyseData.readlines()[0])
  107. #已文件夹时间点分割,获取基础时间轴
  108. self.BaseTimeCenter=self.AnalyseStack[0].split(',')[self.AnalyseField]
  109. #转化话单发送时间为整数
  110. self.ChangeBaseTime=self.ChageTime(self.BaseTimeCenter)
  111. forhinrange(len(self.AnalyseList[i])):
  112. forzinself.AnalyseStackSend[h]:
  113. self.TelTime=self.ChageTime(z.split(',')[self.AnalyseField])
  114. #printstr(self.TelTime)+"////"+str(self.ChangeBaseTime)
  115. importmath
  116. #获得已基础时间为轴的时间差值
  117. #printint(math.fabs(self.TelTime-self.ChangeBaseTime))/60
  118. temp.append((int(math.fabs(self.TelTime-self.ChangeBaseTime))/60)/self.AnalyseTimeArea)
  119. #Analyse_CountTimeFlow.writelines("话单时间:%s/n初始时间片时间片分时流量/n"%(self.dict.keys()[i]))
  120. #Analyse_CountTimeFlow.close()
  121. printself.BaseTimeCenter[1:11]
  122. forjinrange(1440/int(self.AnalyseTimeArea)):
  123. iftemp.count(j)<>0:
  124. #Analyse_CountTimeFlow=open('Analyse_CountTimeFlow.log','a')
  125. print"分析日期:%s;分析时间片:%s分钟;第%s时间片;分时流量为%s条;"%(self.BaseTimeCenter[1:11],self.AnalyseTimeArea,j,temp.count(j))
  126. #Analyse_CountTimeFlow.writelines("%s%s%s/n"%(self.AnalyseTimeArea,j,temp.count(j)))
  127. defChageTime(self,datatime):
  128. #初始化变量
  129. self.YearMD=""
  130. self.TimeCS=""
  131. #引用时间参数
  132. self.datatime=datatime
  133. self.SplitDataTime2=self.datatime[1:11].split('-')
  134. self.SplitDataTime3=self.datatime[12:20].split('.')
  135. #分割结果['2008','03','10']['11','18','18']
  136. #组合分割数据转换时间为整数
  137. foriinself.SplitDataTime2:
  138. self.YearMD+=i
  139. forhinself.SplitDataTime3:
  140. self.TimeCS+=h
  141. self.newTime=self.YearMD+self.TimeCS
  142. returnint(self.newTime)
  143. def__del__(self):
  144. pass
  145. classControlThread(ThreadMain):
  146. def__init__(self):
  147. basepath,dict=self.Get_Path()
  148. self.dict=dict
  149. self.basepath=basepath
  150. defControl_Thread(self):
  151. #控制使用分析线程
  152. print"-----------------------------------------"
  153. ObjectThread=ThreadMain()
  154. print"开始计算每日流量:"
  155. ObjectThread.AnalyseMethod_Countdayflow()
  156. print"计算结束"
  157. print"-----------------------------------------"
  158. importtime
  159. time.sleep(0.01)
  160. print"开始计算分时流量:"
  161. ObjectThread.AnalyseMethod_CountTimeFlow()
  162. print"计算结束"
  163. print"-----------------------------------------"
  164. if__name__=="__main__":
  165. ObjectControl=ControlThread()
  166. ObjectControl.Control_Thread()
  167. #path=ReadConfig(path)

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

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

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

  1. 分析后数据如下:
  2. -----------------------------------------
  3. 开始计算每日流量:
  4. 执行过程[20080930]:第0文件大小为4文件
  5. 执行过程[20080929]:第0文件大小为103文件
  6. 计算结束
  7. -----------------------------------------
  8. 开始计算分时流量:
  9. 2008-09-30
  10. 分析日期:2008-09-30;分析时间片:5分钟;第0时间片;分时流量为4条;
  11. 2008-09-29
  12. 分析日期:2008-09-29;分析时间片:5分钟;第0时间片;分时流量为95条;
  13. 分析日期:2008-09-29;分析时间片:5分钟;第1时间片;分时流量为4条;
  14. 分析日期:2008-09-29;分析时间片:5分钟;第2时间片;分时流量为4条;
  15. 计算结束
  16. -----------------------------------------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics