2016-10-24 9 views
1

私は、hdfテーブルからソートされたレコードを取得する方法を探しています。ここでのpython MWEは次のとおりです。hdfテーブルからソートされたレコードを取得する方法

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によって並べ替えられ、time > 0ですべてのレコードを取得したいと思います。私が行う場合:

table.read_where('time > 0') 

を、それが取得されます。timeによってソートされていない

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

を。 read_sortedを使用しようとすると、サブセットの代わりにテーブル全体が得られます(read_sortedの条件引数はありません)。

よくあることは何ですか?私のテーブルがデータベースにソートされて保存されていることを確認する必要がありますか?または、私はread_whereの後に検索されたセットを自分自身で並べ替えるべきですか?

答えて

0

あなたの質問にすべての答えが合っているとは思えません。

ファイルに一度書き込んで何度も読んでいなければならない場合は、テーブルをソートした方法で保存することをお勧めします。既存のファイルの場合は、既存のデータをソートしてコピーできるptrepackユーティリティを使用できます。

データを数回しか読み取らない場合は、ソートされた方法で保存するのが最も効率的ではない場合があります。ちょうどread_whereを使用してデータをメモリに格納し、その後ソートします。

データがメモリに収まるように大きくなる場合は、ソートされた方法でデータを保存する必要があります。

システムの性能(SSD、HDD、ネットワークストレージ、CPU、など)によってはさらに多くの可能性があります

関連する問題