Примеры столбцов скорости и значения, как правило, не являются типом столбцов, которые вы запрашивали бы в OLAP-методе, - это значения, которые вы пытаетесь получить, и предположительно будут в наборе результатов, либо в виде отдельных строк, либо агрегированный.
Однако я сказал обычно . В нашей схеме OLAP у нас есть хороший пример столбца, о котором вы думаете: event_time (поле даты и времени, с гранулярностью до второго). В наших данных это будет почти уникально - в одну и ту же секунду не будет происходить двух событий, но поскольку в нашей таблице хранятся данные за годы, это все еще означает, что существуют сотни миллионов потенциально дискретных значений, и когда мы запускаем наши Запросы OLAP мы почти всегда хотим ограничивать на основе временных диапазонов.
Решение состоит в том, чтобы сделать то, что сказал Дэвид Разник, - вы создаете «стоимостную» версию значения. Таким образом, в нашей таблице, в дополнение к столбцу event_time, у нас есть столбец event_time_bucketed, который является просто датой события с временной частью 00:00:00. Это уменьшает количество различных значений с сотен миллионов до нескольких тысяч. Затем во всех запросах, ограничивающих дату, мы ограничиваем как столбец с реальными значениями (так и столбец с реальными значениями (так как этот столбец будет недостаточно точным, чтобы дать нам реальное значение), например ::10000
WHERE event_time BETWEEN '2009.02.03 18:32:41' AND '2009.03.01 18:32:41'
AND event_time_bucketed BETWEEN '2009.02.03' AND '2009.03.01'
В этих случаях конечный пользователь никогда не видит столбец event_time_bucketed - он просто предназначен для оптимизации запросов.
Для значений с плавающей запятой, о которых вы упомянули, стратегия группирования может потребовать немного больше внимания, так как вы хотите выбрать метод, который приведет к относительно равномерному распределению значений и сохранит смежность. Например, если у вас есть классическое распределение колоколов (с хвостами, которые могут быть очень длинными), вы хотите определить диапазон, в котором проживает основная часть населения (скажем, 1 или 2 стандартных отклонения от среднего), разделите его на равномерное и создайте еще два сегмента для «все меньше» и «все больше».