AS ts,
arrayElement(groupArray(value), -1) AS val
FROM(
SELECT "последнее значение до интервала"
UNION ALL
SELECT "данные за интервал"
UNION ALL
SELECT "последнее значение в интервале"
)
GROUP BY ts
ORDER BY ts WITH FILL STEP toIntervalMinute(1)
INTERPOLATE (val AS val)`
Т.е. вибираются значения и группируются поминутно с поминутной интерполяцией
Выборка за интервал проходит очень быстро, а вот выборка последнего значения до интервала argMax(value, timestamp) бывает до 3 секунд.
Как то можно упростить выборку и сократить время?
SHOW CREATE TABLE на pastila.nl и полный SELECT "последнее значение до интервала" расшарьте?
SELECT argMax(value, timestamp) FROM history.measurements WHERE unit_guid = '01831859-67e9-9fa4-85e5-9a502172da5b' AND timestamp <= toDateTime('2023-08-29 19:45:00') AND tag = 't1' AND parameter = 'pv'
SHOW CREATE TABLE то покажите
CREATE TABLE history.measurements ( timestamp DateTime, unit_guid String, tag String, parameter String, value Float64 ) ENGINE = Distributed('*', 'history', 'measurements_shard', rand())
SHOW CREATE TABLE history.measurements_shard ?
CREATE TABLE history.measurements_shard ( timestamp DateTime, unit_guid String, tag String, parameter String, value Float64 ) ENGINE = MergeTree PARTITION BY toYYYYMM(timestamp) ORDER BY (unit_guid, tag, parameter, timestamp) SETTINGS index_granularity = 8192
Обсуждают сегодня