Выборка в ClickHouse
Я смотрел Базы данных. ClickHouse. Колоночные СУБД.
Там на слайде
( на видео это участки 21:15-28:20 и 25:41-28:20)
разбирается, что попадет в результат запроса
CounterID In ['a', 'h']
Вопрос:
Почему результат получается именно такой как показано на слайде?
Или если быть точнее, то почему в результаты выборки проходят значения не соответствующие условию выборки?
(в него попадают значения b.1,b.2,g.1,g.2 с CounterID равным b и g и не соответствующие условию)
Ссылки:
- Видео: https://www.youtube.com/watch?v=36Qql0DE4tk&t=1268s
- Презентация: https://docs.google.com/presentation/d/1-Yy2RBqFomhMpckWrFUehZBRR0ZH6MDCk5kFxOEqtDw/edit#slide=id.g72338cd894_0_67
Ответы (1 шт):
Ответ кроется в следующем факте:
Минимальная извлекаемая единица данных - это гранула
Соответственно данные можно извлечь только гранулами.
Невозможно извлечь какое-то одно конкретное значение
Данный факт является объяснением всего что происходило на том слайде
Соответственно при запросе CounterID In ['a', 'h']
мы извлекаем гранулы: [a.1, a.2, a.3, g.1, h.2]
Смысл прост: мы выбираем все гранулы в которых CounterID равен либо a, либо h.
- С гранулами
[a.1, a.2]надеюсь все понятно.
Там все значения соответствуют условию - С гранулой
[a.3]уже есть проблемы, поскольку она уже содержит в себе значения b.1,b.2
А входят они в нее ровно только потому что мы не можем разделить гранулу и эта гранула соответствует условию выборки, поскольку она содержит значения с первичным ключамa - с гранулой
g.1похожая история, только наоборот
в нее под самый конец вошли значения с ключомh, после чего данная гранула начала соответствовать условию выборки, но как-то сепарировать их от значений, которые были в данной грануле до мы не можем - с гранулой
h.2все чисто...там все значения содержат ключhи заканчиваются аккурат к границе гранулы.
Соответственно, мы выбираем все ГРАНУЛЫ, в которых есть ХОТЯ БЫ ОДНО ЗНАЧЕНИЕ, подходящее условию.