event String,
created_at DateTime,
sent_at DateTime,
mid String,
prop_k Array(String),
prop_v Array(String),
did String
) engine = ReplacingMergeTree()
order by (mid, event, did, sent_at, created_at);
Если сделать запрос
select did, prop_v[indexOf(prop_k, 'offer')] as offer from (
select did, prop_k, prop_v
from events
where event = 'Event name'
and created_at between parseDateTimeBestEffort('2019-08-15 18:00') AND parseDateTimeBestEffort('2019-08-15 19:00')
and has(prop_k, 'offer') = 1
)
where offer = 'Offer name';
Почему идет full scan?
Если я правильно понял, то его быть не должно, мы ведь выбираем только данные по условию.
Индекс работает по префиксу. У вас в where нет ограничений на mid did sent_at
Обсуждают сегодня