Выборка в 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 и не соответствующие условию)


Ссылки:


Ответы (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 и заканчиваются аккурат к границе гранулы.

Соответственно, мы выбираем все ГРАНУЛЫ, в которых есть ХОТЯ БЫ ОДНО ЗНАЧЕНИЕ, подходящее условию.

введите сюда описание изображения

→ Ссылка