Предположим, у меня есть 2 таблицы A
и B
. Я создаю MV
(материализованное представление) с join
запросом из двух таблиц, псевдо-типа:
create materialized view a_b engine = Memory as
select * from(
select * from A
) all inner join (
select * from B
) using some_col;
Я знаю, что a_b
обновляется только при вставке данных в таблицу A
и при отправке данных в B
больше ничего не происходит. Я хочу, чтобы мой MV обновлялся при обновлении обеих таблиц.
Мой обходной путь - создать еще один MV
, который изменяет размещение A
, B
и указывает на a_b
как
create materialized view a_b_2 to a_b as
select * from(
select * from B
) all inner join (
select * from A
) using same_col;
У меня есть несколько вопросов об этом подходе:
1. Есть ли more legal way
для архивации того же эффекта в clickhouse
?
2. Предположим, у меня есть 2 входящих пакета данных, которые BD_A
и BD_B
будут вставлены в A
и B
одновременно. Некоторые данные двух партий (BD_A_B
) соответствуют join
условию. Есть ли шанс, что MV
потерял эти BD_A_B
, потому что MV a_b
обрабатывает BD_A
с ранее вставленными B
и MV a_b_2
процессами BD_B
с ранее вставленными A
.
A
таблица обновляется. Мой взгляд всегда пуст. У тебя есть какое-то решение? Код точно такой же, как у вас. - person Joozty   schedule 11.07.2018Materialized View
, если я не могу использовать соединение? Для меня это не имеет смысла. - person Joozty   schedule 11.07.2018A
, и если я хочу, чтобы оно автоматически обновлялось при обновленииB
, я должен создать еще однуMV
точку на первый MV. - person Thang Nguyen   schedule 11.07.2018A
иB
таблиц? Я задал аналогичный вопрос на GitHub и получил ответ, что это это невозможно. Мне интересно, это работает для вас, потому что не должно быть ... - person Joozty   schedule 11.07.2018MV
в основном используется для предварительной агрегации в Clickhouse. - person Amos   schedule 22.07.2018