如何从hdf表中检索已排序的记录

时间:2016-10-24 07:16:49

标签: hdf5 pytables hdf

我正在寻找一种从hdf表中检索已排序记录的方法。这是一个python MWE:

import tables
import numpy as np

class Measurement(tables.IsDescription):
    time = tables.Float64Col()
    value = tables.Float64Col()

h5 = tables.open_file('test.hdf', 'w')
h5.create_table('/', 'test', Measurement)

table = h5.root.test
data = np.array([(0, 6), (5, 1), (1, 8)], dtype=[('time', '<f8'), ('value', '<f8')])
table.append(data)
table.cols.time.createCSIndex()

现在,我想检索time > 0的所有记录,按time排序。如果我这样做:

table.read_where('time > 0')

然后它得到:

array([(5.0, 1.0), (1.0, 8.0)], dtype=[('time', '<f8'), ('value', '<f8')])

未按time排序。如果我尝试使用read_sorted,那么我得到整个表而不是一个子集(read_sorted没有条件参数)。

通常的做法是什么?我应该确保我的表存储在数据库中吗?或者我应该在read_where之后对检索到的集合进行排序?

1 个答案:

答案 0 :(得分:0)

我不认为你的问题有一个适合所有人的答案。

如果您处于一次写入文件并且必须多次阅读的情况下,以排序的方式存储表肯定是个好主意。对于现有文件,您可以使用ptrepack实用程序,该实用程序可以按排序方式复制现有数据。

如果您只读过几次数据,那么以排序方式存储可能不是最有效的方式。只需read_where即可将您的数据存入内存并进行排序。

如果您的数据很大以适应内存,您必须以有序的方式存储数据。

还有更多可能性,具体取决于您的系统性能(SSD,HDD,网络存储,CPU,......)