login(`admin,`123456)


def query(netAim,staAim){
	/*
	 * Description：
	 * 	此函数用于查询出需要导出为MiniSeed文件的数据 
	 * Input：
	 * 	netAim：STRING  目标台网
	 * 	staAim：STRING  目标台站
	 * Output：
	 * 	t ：TABLE  目标数据
	 */
	aim = exec id from loadTable("dfs://real","tagInfo") where net = netAim and sta = staAim
	t = select * from loadTable("dfs://real","realData") where ts >= 2023.03.02T00:00:00.000 and ts < 2023.03.03T00:00:00.000 and id in aim
	t = select ts,loc,net,sta,chn,value,tagid from ej(loadTable("dfs://real","tagInfo"),t,`id) 
	return t	
}

def pacK(t){
	/*
	 * Description：
	 * 	此函数用于将query()的结果打包好，方便后续输出成mseed文件
	 * Input：
	 * 	t：TABLE   要导出的历史数据
	 * Output：
	 * 	aimFilePath：STRING VECTOR 目标存储路径
	 * 	sidList：STRING VECTOR 导出文件块的sid列表
	 * 	startTimeTable：TABLE   每个文件块的采样开始时间
	 * 	dataList：INT VECTOR  每个文件块的采样值向量
	 */
	sidList = exec distinct tagid from t
	aimFilePath= "../outputMiniSeed/"+sidList+'.20230302.mseed'
	startTimeTable = select min(ts) as startTime from t group by tagid order by tagid desc 
	dataList = []
	for(i in 0..(sidList.size()-1)){
		tmpValue = exec value from t where tagid = sidList[i]
		dataList.append!(tmpValue)
	}
	return  aimFilePath, sidList, startTimeTable, dataList	
}

def mainOutputMiniSeed(netAim,staAim){
	/*
	 * Description：
	 * 	此函数用于将历史数据导出成MiniSeed文件，采用了并行的方式导出(ploop)
	 * Input：
	 * 	netAim：STRING  目标台网
	 * 	staAim：STRING  目标台站
	 * OutPut：	
	 * 	record：TABLE  记录了查询、打包、导出三个过程耗时的表
	 */
	record = table(1:0,`operate`totalConsume`avgConsume,[STRING,INT,INT])
	consum = evalTimer(query{netAim,staAim},10)
	insert into record values(["query"],[consum$INT],[(consum\10)$INT])
	t = query(netAim,staAim)
	consum = evalTimer(pacK{t},10)
	insert into record values(["pack"],[consum$INT],[(consum\10)$INT])	
	aimFilePath, sidListid, startTimeTable, dataList = pacK(t)
	sampleRate = 100.00
	consum = evalTimer(ploop{mseed::write{,,,sampleRate,},aimFilePath,sidListid,startTimeTable[`startTime],dataList},10)
	insert into record values(["output"],[consum$INT],[(consum\10)$INT])		
	ploop(mseed::write{,,,sampleRate,},aimFilePath,sidListid,startTimeTable[`startTime],dataList)
	return record
}

