Многомерное представление данных. Общая схема организации хранилища данных. Характеристики, типы и основные отличия технологий OLAP и OLTP. Схемы звезда и снежинка. Агрегирование.
Презентация к лекции: olap.ppt
1. Расширения SQL для организации OLAP запросов. Обзор.
При работе с кубами - операции, зачастую, эквивалентны срезу, группировке и сортировке, то есть в запросах используются большое количество различых join'ов, условий where, группировок group by, сортировок order by и т.д. А на выходе получаются новые кубы. Для решения этой проблемы - 2 способа расширения group by и агрегатные функции.
Например, ROLLUP и CUBE существенно снижают ресурсоемкость запросов с суммированием (summary queries) и в целом значительно упрощают эти операции. Применение опций CUBE и ROLLUP во фразе GROUP BY запроса позволяет производить функционально более полные операции суммирования. CUBE и ROLLUP предоставляют информацию, которую в ином случае можно было получить только посредством дополнительных запросов или кодирования, таким образом они упрощают программирование на SQL тем, что устраняют необходимость проектировать UNION-предложения.
- rollup - расширение group by, позволяет применять простые агрегатные функции (sum, avg, min, max и count) на различных уровнях группировки: от самого подробного, до наивысшего;
- cube - расширение group by, похож на rollup, но позволяет вычислять одну и ту же функцию по всевозможным комбинациям столбцов, используется для подробных отчетов;
- grouping sets - расширение group by, позволяет делать то же, что и cube, но не для всего куба (что обычно тяжело и долго), а только для выделенных измерений;
- grouping, grouping_id, group_id - расширения group by, позволяют определить, производилась ли свертка по полю, а также убрать ненужные и повторяющиеся группы;
- составные столбцы - используются вместе с rollup, позволяют производить свертку сразу по набору столбцов;
- конкатенированные группы - результат использование составных столбцов и grouping sets, позволяют группировать еще точнее;
- «оконные» агрегирующие функции - функции, применяемые к участкам таблиц, позволяют производить расчеты по интересующим значениям, а не по всей таблице без использования подзапросов;
- model - своеобразный заменитель group by, позволяет группировать данные в соответствии с измерениями куба.
2. ROLLUP - расширение к GROUP BY.
ROLLUP строит агрегаты-подытоги (subtotal aggregates) на каждом запрошенном уровне, включая окончательные итоги (grand total) - по сути, с помощью этого расширения осуществляется группировка по комбинациям столбцов (иерархии), то есть сначала по n столбцам, потом по n-1, ..., пустое множество и «делает union». (Пример: свертка нарастающим итогом). Все столбцы в rollup должны быть выбраны в запросе, но можно использовать не все выбранные столбцы:
select ... group by список_столбцов, rollup (список_столбцов)
Короткий запрос и эффективное выполнение (группировка по n-1 столбцам использует результаты группировки по n столбцам и т.д.)
Пример
Как правило агрегатом является сумма, но это может быть и любой другой: AVG, COUNT, MIN, MAX и др. Запрещено использование агрегатов более низких уровней. Список столбцов может содержать до 255 столбцов.
SELECT Time, Region, Department, SUM(Profit) FROM Sales GROUP BY ROLLUP (Region, Department)