Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
339 views
in Technique[技术] by (71.8m points)

从hdf5文件导入数据时如何把整数转换成时间?

我有一个h5文件,运行下面代码,

use hdf5
dataFilePath = "/home/database/v10012/server/comm-ticks-updates1.hdf5"
datasetName = "/A2005/20200506"
schema=hdf5::extractHDF5Schema(dataFilePath,datasetName)
tmpTB = hdf5::loadHDF5(dataFilePath,datasetName)

得到schema如下所示:
image
数据集tmpTB如下所示:
image

现在我要h5文件的数据导入下列DolphinDB分布式表:

db1 = database("", VALUE, 2020.01.01..2020.12.31)
db2 = database("", HASH,[SYMBOL,3])
db = database("dfs://future",COMPO, [db1,db2])
colNames=`instrument`tradingday`calendarday`time`lastp`volume`openinterest`turnover`ask1`asksz1`bid1`bidsz1
colTypes=[SYMBOL,DATE,DATE,TIME,DOUBLE,INT,DOUBLE,DOUBLE,DOUBLE,INT,DOUBLE,INT]
t=table(1:0,colNames,colTypes)
transpt=db.createPartitionedTable(t,`tick,`tradingday`instrument)

碰到一个问题就是tradingday、calendarday、time的值如何从整数抓换成DATE和TIME,也即20200506如何转换成2020.05.06,900003376如何转换成9:00:03.376?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

新版本hdf5插件hdf5::loadHDF5Ex函数
提供了一个transform参数,在将数据导入数据库之前,若需要对数据进行预处理,例如转换日期和时间数据类型,填充空值等,可以在hdf5::loadHDF5Ex函数时指定transform参数。tansform参数接受一个函数作为参数,并且要求该函数只能接受一个参数。函数的输入是一个未分区的内存表,输出也是一个未分区的内存表。

tradingday、calendarday、time列可以使用temporalParse函数进行日期和时间类型数据的格式转换。再使用replaceColumn!函数替换表中原有的列。


def d2m(mutable t){
    return t.replaceColumn!(`tradingday,t.tradingday.format("00000000").datetimeParse("yyyyMMdd")).replaceColumn!(`calendarday,t.calendarday.format("00000000").datetimeParse("yyyyMMdd")).replaceColumn!(`time,t.time.format("000000000").datetimeParse("HHmmssSSS"))
}

lst=exec tableName from hdf5::lsTable(dataFilePath) where tableType="H5T_COMPOUND"
for(datasetName in lst) 
    hdf5::loadHDF5Ex(db,`tick,`tradingday`instrument,dataFilePath,datasetName,,,,d2m)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...