184 похожих чатов

Всем привет! Подскажите, пожалуйста, должно ли следующее работать именно так,

как оно работает. Версия 20.11.4.13

Выполняю последовательно:

create table test1
(
id UUID,
dt DateTime,
v1 Int32,
v2 Int32
)
Engine = MergeTree()
partition by toYYYYMM(dt)
Order by (id)


create table test2
(
id UUID,
dt DateTime,
v1 Int32,
v2 Int32
)
Engine = MergeTree()
partition by toYYYYMM(dt)
Order by (id)


create materialized view test_mv Engine=MergeTree ORDER BY (same_as_v2)
as
SELECT
id as t1_id,
dt as t1_dt,
v1 as t1_v1,
v2 as t1_v2,
same_as_v2
from
(
select test1.*, test2.v2 as same_as_v2
from test1
inner join test2 USING id
where test1.v1 = 5
)


INSERT INTO test1
SELECT generateUUIDv4() as id,
now() + (sipHash64(id) % 10000000) as dt,
sipHash64(id) % 5000 as v1,
sipHash64(id) % 50000 as v2
from system.numbers n
limit 10000000


INSERT INTO test2
select * from test1

Выполнив это, получаю отсутствие строк в MV.

Если делаю все то же самое, но DDL MV такой, то данные есть:

create materialized view test_mv Engine=MergeTree ORDER BY (same_as_v2)
as
SELECT
test1.id as t1_id,
test1.dt as t1_dt,
test1.v1 as t1_v1,
test1.v2 as t1_v2,
same_as_v2
from
(
select test1.*, test2.v2 as same_as_v2
from test2
inner join test1 USING id
where test1.v1 = 5
)

Получается, что MV c JOIN — это триггер на INSERT только в левую таблицу? Если это все-таки так, то где это описано? Не увидел в доке описания такого поведения.

И еще, можно ли как-то сделать, чтобы MV было триггером на INSERT в обе таблицы? Или только если делать два MV и потом их объединять? И есть ли в таком случае гарантия, что данные сджойнятся если в обе таблицы произойдет синхронная вставка?

1 ответов

17 просмотров

да все так. два MV и пусть пишут в одну таблицу. https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf 26 страница. https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7611

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта