Почему строки возвращаются как устаревшие при получении данных TimeSeries с помощью нескольких последовательных запросовPython

Программы на Python
Ответить
Anonymous
 Почему строки возвращаются как устаревшие при получении данных TimeSeries с помощью нескольких последовательных запросов

Сообщение Anonymous »

Я использую GridDB Cloud с клиентом Python (griddb_python) и обнаружил воспроизводимую проблему, при которой выполнение нескольких последовательных запросов в контейнере TimeSeries приводит к тому, что второй запрос возвращает устаревшие данные, если я не воссоздаю RowSet.
Схема

Код: Выделить всё

import griddb_python as griddb

conInfo = griddb.ContainerInfo(
name="ts_metrics",
column_info_list=[
("ts", griddb.Type.TIMESTAMP),
("cpu", griddb.Type.FLOAT)
],
type=griddb.ContainerType.TIME_SERIES,
row_key=True
)
store.put_container(conInfo, True)

Вставьте тестовые данные

Код: Выделить всё

import datetime

container = store.get_container("ts_metrics")

base = datetime.datetime(2024, 6, 1, 0, 0)
for i in range(5):
container.put((base + datetime.timedelta(minutes=i), 0.5 + i))

Запрос 1 (работает)

Код: Выделить всё

query = container.query("SELECT * WHERE ts >= TIMESTAMP('2024-06-01T00:00:00')")
rs = query.fetch(False)
print([row for row in rs])

Возвраты:

Код: Выделить всё

[(2024-06-01 00:00:00, 0.5), ..., (00:04:00, 4.5)]

Запрос 2 к одному и тому же набору строк (устаревшие данные)

Код: Выделить всё

query = container.query("SELECT * WHERE ts >= TIMESTAMP('2024-06-01T00:02:00')")
rs = query.fetch(False)
print([row for row in rs])

Ожидается:
Строки начиная с 00:02.
Фактическое:
Печатаются результаты запроса 1, даже если текст SQL изменился.
Если я воссоздаю контейнер или создаю новый объект RowSet вручную, проблема исчезает.
Вопрос
Существует ли известное ограничение в клиенте GridDB Python, которое предотвращает повторное использование TimeSeries RowSet для последовательных запросов, что приводит к чтению устаревшего буфера, и требуется ли новый RowSet для каждого выполнения запроса?
Что я пробовал
  • Вызов rs.close() и query.close() перед повторным использованием → нет эффекта
  • ВызовContainer.flush() иContainer.commit() → нет эффекта
  • Воссоздание только запроса → все еще неактуально
  • Воссоздание объекта-контейнера → исправляет
  • Протестировано на GridDB CE 5.3 и GridDB Cloud → идентичное поведение
  • Зависит от TimeSeries; В подборках эта проблема не отображается


Подробнее здесь: https://stackoverflow.com/questions/798 ... iple-seque
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»