首先,还是通过export命令将某表数据导出为del格式
-
--Startofgeneratedscriptfor192.168.0.85-INFO85-INFOSPY(db2inst1)
- --Oct-11-2008at14:53:28
-
EXPORTTO'C:/DATA_WHITELISTS_R.del'OFDEL
-
SELECT*FROM"DB2INST1"."DATA_WHITELISTS_R";
-
#SYNC10;
-
--Endofgeneratedscriptfor192.168.0.85-INFO85-INFOSPY(db2inst1)
通过以下程序,将这个del格式的数据进行分离
-
#-*-coding:cp936-*-
-
#===============================================================================
-
#开发需求:与数据时间片分析工具共同使用,该程序主要用来分析数据表del文件
-
#1.可将del数据源文件,按照时间分割为新的数据文件
-
#2.可将del数据源文件,按字定义大小进行分割split_record
-
#===============================================================================
-
importos,time
-
#需要分析的del文件名
-
DelName="DATA_ALARM_BA.del"
-
path=os.getcwd()+"/%s"%(DelName)
-
#分析后的输出路径
-
os.system("mkdirAnalyse")
-
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))
-
foriinrange(len(Data_List)):
-
datatime=""
-
foryinData_List[i].split(',')[split_filed][1:11].split('-'):
- datatime+=y
- globaltemp
- temp=datatime
-
ifint(datatime)-int(temp)<>0:
- printos.getcwd()
-
os.system("mdAnalyse//%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:
- printos.getcwd()
- printtemp
-
os.system("mdAnalyse//%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/envpython
-
#-*-coding:cp936-*-
-
#===============================================================================
-
#开发需求:与数据分离工具共同使用,该程序主要用来分析单位时间的单表入库平均值
-
#1.设定一个分析时间片,单位为分钟,AnalyseTimeArea
-
#2.可设定需要分析数据库表所在字段,AnalyseField
-
#===============================================================================
- importthreading,os,time
-
classReadConfig():
-
defBase_Config(self):
-
#配置话单路径
-
TelPath=os.getcwd()+"//Analyse"
-
#printTelPath
-
returnTelPath
-
classGetPath(ReadConfig):
-
defGet_Path(self):
-
#获取路径下分析文件,建立字典
- dict={}
- dir_temp=[]
- file_temp=[]
-
basepath=self.Base_Config()
-
#printbasepath
-
forroot,dirs,filesinos.walk(self.Base_Config()):
-
#获取文件夹节点,获取文件夹对应文件
-
fordirindirs:
- dir_temp.append(dir)
- dir_temp.sort()
-
foriindir_temp:
-
#printself.Base_Config()+"//"+str(i)
-
forroot,dirs,filesinos.walk(self.Base_Config()+"//"+str(i)):
-
#获取对应文件夹下的数据
- file_temp.append(files)
-
foriinrange(len(dir_temp)):
-
#建立数据字典
- dict[dir_temp[i]]=file_temp[i]
-
returnbasepath,dict
-
classThreadMain(threading.Thread,GetPath):
-
def__init__(self):
-
#设定一个分析时间片,单位为分钟
-
self.AnalyseTimeArea=5
-
#需要分析数据库表所在字段
- self.AnalyseField=4
-
basepath,dict=self.Get_Path()
-
#printbasepath,dict
- self.dict=dict
- self.basepath=basepath
-
defThread_Contorl(self):
-
#读取字典的索引,索引为文件夹节点self.dict.keys()[i]
-
self.Add_Tel_Path_temp2=[]
-
#printself.dict.keys()
-
foriinrange(len(self.dict.keys())):
-
self.Add_Tel_Path_temp1=[]
-
#printself.dict.keys()[i],self.dict[self.dict.keys()[i]]
-
foryinrange(len(self.dict[self.dict.keys()[i]])):
-
#printself.dict.keys()[i],self.dict[self.dict.keys()[i]]
-
#printlen(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)
-
#printAdd_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]]
-
returnself.Add_Tel_Path_temp2
-
#================================================================================
-
#已文件夹为单位进行时间分割计算每日的话单总流量
-
#MethodName:AnalyseMethod_Countdayflow
-
#Author:xinkaiAdd:2008-3-10
-
#================================================================================
- defAnalyseMethod_Countdayflow(self):
-
self.CountFlow=0
-
#由线程类获得分析数组
-
self.AnalyseList=self.Thread_Contorl()
-
#printAnalyseList
-
foriinrange(len(self.AnalyseList)):
-
#printself.dict.keys()[i],AnalyseList[i]
-
#===============================================================================
-
#此处需要加判断日期以及有效话单
-
#===============================================================================
-
foryinrange(len(self.AnalyseList[i])):
-
#printAnalyseList[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())
-
#printself.dict.keys()[i]+str(len(AnalyseData.readlines()))+"/n"
-
#print"[",self.dict.keys()[i]+"]当日数据总流量为:"+str(self.CountFlow)
-
#================================================================================
-
#已文件夹为单位进行时间分割按照划定的时间片对每日话单分时流量进行统计
-
#MethodName:AnalyseMethod_CountTimeFlow
-
#Author:xinkaiAdd:2008-3-10
-
#================================================================================
-
defAnalyseMethod_CountTimeFlow(self):
-
#Analyse_CountTimeFlow=open('Analyse_CountTimeFlow.log','w')
-
#由线程类获得分析数组
- self.AnalyseList=self.Thread_Contorl()
-
foriinrange(len(self.AnalyseList)):
- temp=[]
- self.AnalyseStack=[]
- self.AnalyseStackSend=[]
-
foryinrange(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)
-
forhinrange(len(self.AnalyseList[i])):
-
forzinself.AnalyseStackSend[h]:
-
self.TelTime=self.ChageTime(z.split(',')[self.AnalyseField])
-
#printstr(self.TelTime)+"////"+str(self.ChangeBaseTime)
-
importmath
-
#获得已基础时间为轴的时间差值
-
#printint(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()
- printself.BaseTimeCenter[1:11]
-
forjinrange(1440/int(self.AnalyseTimeArea)):
-
iftemp.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)))
-
defChageTime(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']
-
#组合分割数据转换时间为整数
-
foriinself.SplitDataTime2:
- self.YearMD+=i
-
forhinself.SplitDataTime3:
- self.TimeCS+=h
- self.newTime=self.YearMD+self.TimeCS
-
returnint(self.newTime)
- def__del__(self):
- pass
-
classControlThread(ThreadMain):
- def__init__(self):
- basepath,dict=self.Get_Path()
- self.dict=dict
- self.basepath=basepath
-
defControl_Thread(self):
-
#控制使用分析线程
-
print"-----------------------------------------"
- ObjectThread=ThreadMain()
-
print"开始计算每日流量:"
- ObjectThread.AnalyseMethod_Countdayflow()
-
print"计算结束"
-
print"-----------------------------------------"
- importtime
- 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条;
- 计算结束
- -----------------------------------------
分享到:
相关推荐
db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用...
DB2恢复删除表学习
DB2导出数据库表结构和数据.pdf
DB2维护检查表,便于DB2的日常维护,健康检查等
db2清空表数据
DB2导出表结构小结
一个大型表的分区表改造方案以及详细步骤。
db2表空间不足及处理
DB2表和表空间状态详解 摘自IBM官网 状态说明很全
第一章 DB2的概貌 2 1.1 文件系统特点 3 1.2 数据库系统特点 3 1.3 DBMS的工作原理 5 1.3.1 数据库管理系统的功能 5 1.3.2 存储管理程序 6 1.3.3查询处理程序 7 1.3.4 事务管理程序 8 1.3.5 日志 9 ...
db2 代码错误对照表db2 代码错误对照表db2 代码错误对照表db2 代码错误对照表db2 代码错误对照表db2 代码错误对照表db2 代码错误对照表db2 代码错误对照表
db2分区表在线迁移 db2分区表在线迁移 db2分区表在线迁移
自己写的db2备份shell脚本
DB2 通用数据库进程全接触
检查db2表空间是否不足已经处理的方法,具体怎么查看表空间是否已经被占满已经具体的解决方法在文档中都有说明。。
db2中有表损坏时最快的恢复方法db2look-move
DB2表空间详解
db2 SQLSTATUS对照表db2 SQLSTATUS对照表db2 SQLSTATUS对照表db2 SQLSTATUS对照表db2 SQLSTATUS对照表
DB2通用数据库DB2通用数据库