Written on: 28. 03. 2021 [20:00]
|
samsond
Dmitry Samsonov
registered since: 11.02.2020
Posts: 14
|
Здравствуйте!
Есть несколько вопросов по операциям с архивами средствами JavaLikeCalc.
Моя задача - организовать перенос данных из одного архива в другой.
Период следования данных в архиве - 0.00351 сек. Тип архива - на файловой системе (FSArch).
Количество записей, которые требуется перенести - около 4000000 (4 млн). Записи следуют непрерывно друг за другом.
Вопрос 1.
Попытка получить выборку вызовом
out = SYS.Archive["va_XXX"].getVals(startTimestamp, endTimestamp, 3510, "");
приводит к тому, что возвращается максимум 100001 запись, хотя должно быть примерно в 40 раз больше.
Прототип getVals() в исходниках имеет следующий вид (tarchval.h):
void TVArchive::getVals(TValBuf &buf, int64_t ibeg, int64_t iend, const string &arch, int limit = 100000, bool onlyLocal)
то есть в нем описан параметр int limit, который как раз и определяет предельное количество элементов выборки, а 100000 - значение по умолчанию.
Вопрос - можно ли как-то управлять этим параметром из JavaLikeCalc? В документации на API упоминаний нет, наивное дописывание в конец списка аргументов не сработало...
Вопрос 2.
При попытке запроса выборки, где количество элементов превышает это ограничение в 100000 элементов, получается так, что выборка выравнивается по времени окончания iend, а не начала ibeg.
Конечно, это в целом не противоречит документации, но все же такое поведение getVals() не интуитивно. А главное - не позволяет нормально вынимать данные частями в случае, если предел превышен.
Может, это ошибка?
Вопрос 3.
Не очень понятно, как работает "жесткая" и "мягкая" сетка в архиве.
В моем понимании, жесткая сетка - это когда
1) задан timestamp начала архива ibeg, его period
2) timestamp ЛЮБОГО помещенного в него значения всегда будет равен ibeg + N*period, независимо от того есть ли в архиве пропуски и пр.
Мягкая сетка - это когда условие 2) не применяется, т.е. можно поместить в архив запись с любым timestamp.
Так вот в моем архиве (он passive, если это имеет значение) выбрана мягкая сетка, но setVal помещает данные все равно как будто бы в привязке к жесткой сетке, не сильно обращая внимание на то, что передаваемый ему timestamp не соответствует условию 2).
Вопрос в том, правильно ли я понимаю что такое "мягкая" и "жесткая" сетка или же надо лучше читать документацию?
Вопрос 4.
getVals() возвращает только данные из архива, без меток времени.
как гарантировать, что выборка будет извлечена без пропусков и дублирующихся элементов, если выборка идет частями и нет возможности узнать точный timestamp каждой извлеченной записи?
Вопрос 5.
В дереве проекта есть возможность извлечь данные из архива в файл, причем, без ограничения в 100000 записей (см. скриншот ниже)
Есть ли доступ к этому функционалу через API?
Попутно: указание только одного архива за раз, а также сброс настроек экспорта после нажатия "Export" не очень удобны в использовании, когда требуется выгрузить множество архивов, особенно в привязке к единой оси времени.
[This article was edited 2 times, at last 28.03.2021 at 20:08.]
Attachment
arch.png (File type: image/png, Size: 374.24 kilobytes) — 1021 downloads
|