Программирование >>  Oracle 

1 ... 234 235 236 [ 237 ] 238 239 240 ... 469


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.



1 ... 234 235 236 [ 237 ] 238 239 240 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика