|
Программирование >> Oracle
1120 Глава 13 tkyte@TKYTE816> insert into time rollup values 2 (add months(sysdate,12), 3 to char(add months(sysdate,12),mm), 4 to char(add months(sysdate, 12), yyyy)); 1 row created. проблема станет очевидной. Мы будем утверждать, что значение DAY определяет значение MON, а MON, в свою очередь, определяет значение YEAR, но в данном случае это неверно. Одно и то же значение месяца будет в таблице для двух разных годов. Пакет DBMS OLAP позволяет проверить достоверность; при этом ошибка будет выявлена. Сначала создаем измерение: tkyte@TKYTE816> create dimension time rollup dim 2 level day is time rollup.day 3 level mon is time rollup.mon 4 level year is time rollup.year 5 hierarchy time rollup 7 day child of mon child of year Dimension created. А затем проверяем его достоверность: tkyte@TKYTE816> exec dbms olap.validate dimension(time rollup dim, user, false, false); PL/SQL procedure successfully completed. Кажется, что все в порядке, но надо проверить таблицу, автоматически созданную и заполненную в процессе работы с данными: tkyte@TKYTE816> select * from mviewS exceptions; OWNER TABLE NAME DIMENSION NAME RELATIONSHI BAD ROWID TKYTE TIME ROLLUP TIME ROLLUP DIM CHILD OF AAAGkxAAGAAAAcKAA7 TKYTE TIME ROLLUP TIME ROLLUP DIM CHILD OF AAAGkxAAGAAAAcKAA8 TKYTE TIME ROLLUP TIME ROLLUP DIM CHILD OF AAAGkxAAGAAAAcKAA9 32 rows selected. Если просмотреть строки, на которые указывает представление MVIEW$ EXCEPTIONS, окажется, что это строки за март (я выполнял этот пример в марте). А именно: tkyte@TKYTE816> select * from time rollup 2 where rowid in (select bad rowid from mview$ exceptions); DAY MON YEAR 01-MAR-01 3 2001 02-MAR-01 3 2001 Материализованные представления 1121 03-MAR-01 3 2001 04-MAR-01 3 2001 30-MAR-01 3 2001 31-MAR-01 3 2001 26-MAR-02 3 2002 32 rows selected. Теперь проблема ясна: значение MON не определяет однозначно YEAR - измерение недостоверно. Его использование небезопасно, поскольку будет получен неверный ответ. Рекомендуется проверять достоверность измерений после их изменения, чтобы гарантировать целостность результатов, получаемых из материализованных представлений благодаря наличию этих измерений. Рекомендация создания материализованных представлений Один из наиболее интересных вариантов использования пакета DBMS OLAP - определение того, какие материализованные представления имеет смысл создавать. Процедура RECOMMEND делает именно это. Имеется две версии этой процедуры. Процедура RECOMMEND MV анализирует структуру таблицы, внешние ключи, материализованные представления, всю соответствующую статистическую информацию, а затем выдает список рекомендаций в порядке убывания приоритетов. Процедура RECOMMEND MV W идет еще дальше. Если используется утилита Oracle Trace и Enterprise Manager Performance Packs, процедура анализирует запросы, обрабатываемые системой, и рекомендует создание материализованных представлений на основе информации о реальной работе. В качестве простого примера, оценим с помощью пакета DBMS OLAP существующую таблицу фактов SALES. Таблица фактов (таблица основной информации) - это таблица в схеме звезда , содержащая фактические данные. Использованная ранее таблица SALES - это таблица фактов. В таблице фактов обычно есть два типа столбцов: столбцы, содержащие факты (например, столбец SALES AMOUNTв нашей таблице SALES), и столбцы, являющиеся внешними ключами к таблицам измерений (например, к таблице TRANS DATEдля нашей таблицы SALES). Давайте посмотрим, что порекомендует пакет DBMS OLAP. Сначала необходимо создать внешние ключи. Процедуры RECOMMEND не будут анализировать объекты DIMENSION при выработке рекомендаций - для определения связей между таблицами им необходимы внешние ключи: 1122 Глава 13 tkyte@TKYTE816> alter table sales add constraint t fk time 2 foreign key( trans date) references time hierarchy Table altered. tkyte@TKYTE816> alter table sales add constraint t fk cust 2 foreign key( cust id) references customer hierarchy Table altered. После этого можно анализировать нашу таблицу фактов, SALES: tkyte@TKYTE816> exec dbms olap.recommend mv(SALES, 10000000000, ); PL/SQL procedure successfully completed. Мы попросили процедуру RECOMMEND MV: проанализировать таблицу SALES; учесть, что для материализованных представлений места предостаточно (мы просто передали очень большое значение в качестве ограничения); не оставлять без необходимости существующих материализованных представлений (мы передали в качестве списка имен сохраняем1х представлений). Теперь можно либо непосредственно обращаться к заполненным этой процедурой таблицам, либо, что удобнее, использовать простую процедуру для в]дачи их содержимого. Для установки этой процедуры и построения отчета надо выполнить: tkyte@TKYTE816> @C:\oracle\RDBMS\demo\saclvdemo Package created. Package body created. Package created. Package body created. tkyte@TKYTE816> exec demo sumadv.prettyprint recornmendations Recommendation Number = 1 Recommended Action is CREATE new summary: SELECT CUSTOMER HIERARCHY.CUST ID, CUSTOMER HIERARCHY.ZIP CODE, CUSTOMER HIERARCHY.REGION , COUNT(*), SUM(SALES.SALES AMOUNT), COUNT(SALES.SALES AMOUNT) FROM TKYTE.SALES, TKYTE.CUSTOMER HIERARCHY WHERE SALES.CUST ID = CUSTOMER HIERARCHY.CUST ID GROUP BY CUSTOMER HIERARCHY.CUST ID, CUSTOMER HIERARCHY.ZIP CODE, CUSTOMER HIERARCHY.REGION Storage in bytes is 2100 Percent performance gain is 43.2371266138567 Benefit-to-cost ratio is .0205891079113603 Recommendation Number = 2 PL/SQL procedure successfully completed.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |