Я пытаюсь создать представление для исходной таблицы, а затем выбрать данные для указанного диапазона отметок времени c из представления и поместить его в таблицу назначения.
У нас есть исходная таблица:
1 Миллион строк помещается в исходную таблицу, которая соответствует данным с 1 января по 31 января.
CREATE TABLE IF NOT EXISTS source(
CELL String,
TIMESTAMP DateTime,
COUNTER1 Float32,
COUNTER2 Float32,
COUNTER3 Float32,
COUNTER4 Float32,
COUNTER5 Float32,
COUNTER6 Float32,
InsertionTime DateTime DEFAULT now(), /* Insertion Time */
QHour DateTime DEFAULT toStartOfFifteenMinutes(TIMESTAMP)
) ENGINE=ReplacingMergeTree()
PARTITION BY toYYYYMM(TIMESTAMP)
ORDER BY (QHour, TIMESTAMP, CELL)
SETTINGS index_granularity = 31768
Теперь мы создали представление исходной таблицы.
CREATE VIEW IF NOT EXISTS myView
AS SELECT
CELL,
QHour,
toStartOfFifteenMinutes(TIMESTAMP) AS ViewQHour,
100 * sum(COUNTER1) / sum(COUNTER2) AS KPI1
FROM (
SELECT
CELL,
TIMESTAMP,
any(QHour) as QHour
argMax(COUNTER1, InsertionTime) AS COUNTER1,
argMax(COUNTER2, InsertionTime) AS COUNTER2
FROM ThreeGCell
GROUP BY TIMESTAMP, CELL, QHour)
GROUP BY ViewQHour, CELL
ORDER BY ViewQHour, CELL
Теперь в представлении мне нужно выбрать данные за период времени из представления: с 1 января по 10 января.
SELECT *
FROM myView
WHERE QHour >= toDateTime('2020-01-01 00:00:00') AND QHour <= toDateTime('2020-01-10 00:00:00')
Но запрос выбора в представлении добавляет все 1 миллион строк к целевой таблице, которая представляет собой данные за весь январь, в то время как я ищу данные за указанный период c только с 1 января по 10 января.
У меня есть следующие вопросы:
- Можем ли мы изменить запрос в представлении, чтобы обрабатывать только указанный период времени c?
- Можем ли мы сгенерировать представление на последнем наборе данных, помещенном в исходную таблицу на лету? Я имею в виду, что мы имеем только отфильтрованный набор данных из исходной таблицы и используем отфильтрованные данные в представлении? Могут ли такие фильтры быть изменены для использования разных временных диапазонов? Например, у нас есть данные с 1 января по 10 января в представлении. Затем во втором прогоне у нас есть данные с 11 января по 20 января в представлении.