Как получить отсортированные записи из таблицы 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, сетевое хранилище, процессор,...)

Другие вопросы по тегам