Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

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

如何将HDF5中的多个表一次性转换为DolphinDB数据库的分布式表

在使用hdf5::loadHDF5Ex将HDF5文件中的数据集转换为DolphinDB数据库的分布式表时,使用查询函数:

dataFilePath="/home/user/data/example.hdf5"
hdf5::lsTable(dataFilePath)

看到这一份HDF5文件下包含了许多个表,如图所示:
image
有没有函数可以一次性将这些表转换为DolphinDB数据库的分布式表?


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

1 Answer

0 votes
by (71.8m points)

使用HDF5插件将HDF5文件导入DolphinDB数据库的分布式表的函数是:
hdf5::loadHDF5Ex(dbHandle,tableName,[partitionColumns],fileName,datasetName,[schema],[startRow],[rowNum],[tranform])

参数

  • dbHandle与tableName: 若要将输入数据文件保存在分布式数据库中,需要指定数据库句柄和表名。
  • partitionColumns: 字符串标量或向量,表示分区列。当分区数据库不是SEQ分区时,我们需要指定分区列。在组合分区中,partitionColumns是字符串向量。
  • fileName: HDF5文件名,类型为字符串标量。
  • datasetName: dataset名称,即表名,可通过ls或lsTable获得,类型为字符串标量。
  • schema: 包含列名和列的数据类型的表。如果我们想要改变由系统自动决定的列的数据类型,需要在schema表中修改数据类型,并且把它作为loadHDF5Ex函数的一个参数。
  • startRow: 读取HDF5数据集的起始行位置。若不指定,默认从数据集起始位置读取。
  • rowNum: 读取HDF5数据集的行数。若不指定,默认读到数据集的结尾。
  • tranform: 一元函数,并且该函数接受的参数必须是一个表。如果指定了transform参数,需要先创建分区表,再加载数据,程序会对数据文件中的数据执行transform参数指定的函数,再将得到的结果保存到数据库中。

函数使用

将HDF5文件中的数据集转换为DolphinDB数据库的分布式表,然后将表的元数据加载到内存中。读取的行数为HDF5文件中定义的行数,而不是读取结果中的DolphinDB表的行数。

将某一个HDF文件中的前600个表批量写入DolphinDB数据库的分布式表的示例代码如下:

dfsPath = "dfs://hdf5_example2"
if(existsDatabase(dfsPath)){
    dropDatabase(dfsPath)
}
db = database(dfsPath,HASH, [SYMBOL,10]) 
dataFilePath = "/home/user/data/comm-ticks.hdf5"
t = hdf5::lsTable(dataFilePath)
for(i in 0:600){
    datasetName = t[i,0]
    hdf5::loadHDF5Ex(db, "hdf5_exmaple", "instrument", dataFilePath,datasetName)
    dfsTable=loadTable(dfsPath,"hdf5_exmaple")
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...