Как получить отсортированные записи из таблицы hdf
Я ищу способ извлечь отсортированные записи из hdf
Таблица. Вот питон 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 ответ
Я не думаю, что есть один размер подходит для всех ответов на ваш вопрос.
Если вы находитесь в ситуации, когда вы записываете один раз в файл, и вам приходится много раз его читать, было бы неплохо хранить таблицы отсортированным образом. Для уже существующих файлов вы можете использовать ptrepack
утилита, которая может скопировать существующие данные в отсортированном виде.
Если вы читаете данные только несколько раз, хранение в отсортированном виде может оказаться не самым эффективным способом. Просто read_where
чтобы получить ваши данные в память и сортировать потом.
Если ваши данные слишком велики, чтобы поместиться в память, вам придется хранить данные в отсортированном виде.
И есть больше возможностей, в зависимости от производительности вашей системы (SSD, HDD, сетевое хранилище, процессор,...)