Использование скриптового языка Oracle Warehouse Builder. Профессионалу-разработчику

Евгения Качалкина

Введение

Данная статья будет интересна специалистам, занимающимся разработкой хранилищ данных с помощью программного средства Oracle Warehouse Builder (OWB). Как известно, данное средство представляет собой графический инструмент создания многомерных моделей с помощью средств Drag and Drop и различных Wizard'ов, не прибегая к программированию. Это дает большое преимущество проектировщикам, не владеющих программированием, и в то же время является и недостатком, т.к. при проектировании большой модели, включающей большое количество показателей, измерений и ETL-процедур, сам процесс проектирования будет монотонным, включающим большое количество повторяющихся операций. Такая процедура не исключает появления ошибок, и будет занимать много времени.
Чаще всего с OWB работают специалисты, которым не чуждо программирование, но которых необходимость выполнять множество однотипных операций сильно удручает. Зачем вручную проделывать однотипные операции, когда это можно запрограммировать? Тем более, OWB представляет такую возможность - существует скриптовый язык OMB Plus.

В данной статье рассматривается идея программного создания модели в OWB с помощью скриптового языка. Также приведены подробные примеры использования OMB Plus.

Скриптовый язык OWB

    Исполняемое окружение - запуск скриптов, особенности

В составе OWB имеется язык программирования OMB Plus, который предназначен для создания сценариев (скриптов). OMBPlus - это расширение языка TCL, которое позволяет писать синтаксические конструкции общего назначения с использованием переменных, циклов, условий, обработок ошибок и т.д.
Среда, с помощью которой происходит выполнение команд, также называется OMB Plus. Запуск среды выполнения в текстовом режиме производится с помощью следующей команды:

   $OWB_HOME/owb/win32/ombplus.bat
 где $OWB_HOME - каталог в который установлен OWB. 

Рис.1 Текстовая консоль выполнения OMB Plus

Также имеется графический вариант консоли выполнения OMB Plus, - его запуск производится с помощью команды:

   $OWB_HOME/owb/win32/ombpluss.bat
 
Рис.2 Графическая консаль выполнения OMB Plus

Чтобы не вводить команды вручную, можно написать скрипт, используя синтаксис команд OMB Plus, и оформить его в виде отдельного файла с расширением tcl.
Запуск программы осуществляется с помощью следующей команды:

  $OWB_HOME/owb/win32/ombplus.bat  <полный путь>/<имя файла>.tcl 

Существуют некоторые особенности в использовании команд в OMB Plus:

  • Все ключевые слова необходимо писать в верхнем регистре;
  • Символьные значения необходимо задавать в одинарных кавычках;
  • При задании полных имен каталогов нельзя использовать обратный слэш (\), для этого необходимо использовать прямой (/) ;
  • Существуют специфические символы, которые tcl интерпретирует по своим правилам, и их не рекомендуется использовать в названиях метаданных моделей. Например, к таким символам относятся $, #, , ;
      • Символ $ используется для задания переменных
      • Символ , используется для разделения одной команды на нескольких строках
      • Символ # используется для комментариев

    Если же такой символ используется в имени объекта, то необходимо его помечать обратным слэшем (\).
    Например,

 OMBCREATE TABLE 'DW$SALES'   

    Основные команды

OMB Plus имеет следующие группы команд:

  • Команды манипулирования метаданными (MML), в эту группу команд входят команды по созданию, изменению, удалению объектов матаданных - OMBCREATE, OMBALTER, OMBDELETE и т.д.;
  • Команды управления средой выполнения (shell) - OMBDCC, OMBHELP;
  • Сервисные команды, эта группа команд предназначения для проверки (validate), компиляции и развертывания модели - OMBCOMPILE, OMBDEPLOY, OMBVALIDATE.

Рассмотрим основные языковые конструкции языка.
1. Присоединение к репозиторию.
Перед выполнением любых операций в репозитарии OWB, к нему необходимо подключиться. Оператор OMBConnect производит подключение к репозитарию. Оператор OMBCC выбирает в качестве текущего, указанный проект и модуль.

OMBCONNECT <owb_owner>/<password owb_owner>@<host>:<port>:<service name>
  OMBCC '/<проект>/<модуль>'

Пример:

  OMBCONNECT owb_owner/owb_owner@test.ru:1521:orcl
  OMBCC '/ROLAP_TEST/RR_MART'

2. Оператор работы с циклами.
Для обработки циклов предназначен оператор foreach
Пример:

foreach tableName [OMBLIST TABLE ] {

... команды с обработкой каждого значения переменной '$tableName'

}

3. Оператор обработки условий.
Как и в абсолютном большинстве языков программирования для обработки условий применяется оператор if .
Пример:

    if {$var == "VARCHAR2"} {

       } elsif {:} {

                   }
       }

4. Оператор присваивания.
Для присвоания значений переменным использется оператор set .
Пример:

set i 1

    Команды создания модели

Безусловно, для разработчиков наибольший интерес представляют команды для оперирования с моделью данных в OWB. Для создания метаданных модели предназначен оператор OMBCREATE ; тип создаваемого объекта указывается в качестве второго аргумента этого оператора. Рассмотрим команды создания измерений и кубов.

    Создание измерений

1. Создание измерений.
Для создания измерения используется вызов OMBCREATE DIMENSION.
Пример:

OMBCREATE DIMENSION 'Dim_Product'
   SET PROPERTIES (BUSINESS_NAME, DESCRIPTION)
   VALUES ('Продукт','Измерение Продукт')
   SET REF SEQUENCE 'META_SEQ'
      ... ... ...

2. Определение уровней измерения.
Для определения уровней измерения используется фраза ADD LEVEL оператора OMBCREATE DIMENSION.
Пример:

  ADD LEVEL 'TOTAL' SET PROPERTIES (BUSINESS_NAME) VALUES ('Итого')
     ADD LEVEL 'PRODUCT_GROUP' SET PROPERTIES (BUSINESS_NAME) VALUES  ('Группа продуктов')
     ADD LEVEL 'PRODUCT' SET PROPERTIES (BUSINESS_NAME) VALUES ('Продукт')
     ... ... ...

3. Определение атрибутов измерения.
Для определения атрибутов для уровней измерения используется фраза ADD LEVEL_ATTRIBUTE OF LEVEL оператора OMBCREATE DIMENSION.
Пример:

ADD LEVEL_ATTRIBUTE 'ID'  OF LEVEL 'PRODUCT_GROUP'
    SET REF DIMENSION_ATTRIBUTE 'ID'
  ADD LEVEL_ATTRIBUTE 'NAME'  OF LEVEL 'PRODUCT_GROUP'
    SET REF DIMENSION_ATTRIBUTE 'NAME'
  ADD LEVEL_ATTRIBUTE 'DESCRIPTION'  OF LEVEL 'PRODUCT_GROUP'
    SET REF DIMENSION_ATTRIBUTE 'DESCRIPTION'
  ... ... ...

4. Создание иерархии.
Для создания иерархии используется фраза ADD HIERARCHY оператора OMBCREATE DIMENSION.
Пример:

ADD HIERARCHY 'H1'
  SET REF LEVELS ('TOTAL','PRODUCT_GROUP','PRODUCT')

В реальных проектах оператор создания измерения может иметь довольно большой размер. В прилагаемом файле приведен законченный пример создания 4-х уровневого измерения.

    Создание кубов

1. Создание куба.
Для создания куба используется вызов OMBCREATE CUBE.
Пример:

OMBCREATE CUBE  'cube_01'
  SET PROPERTIES (BUSINESS_NAME, DESCRIPTION)
  VALUES ('Куб_01','Куб_01')
  ... ... ...

2. Добавление измерений в куб.
Для добавления измерения в куб используется фраза ADD DIMENSION операторов OMBCREATE CUBE.
Пример:

ADD DIMENSION_USE  'Dim_Product'
  SET REF LEVEL 'PRODUCT' OF DIMENSION 'Dim_Product'
  ... ... ...

3. Добавление показателя в куб.
Для добавления показателя в куб служит фраза ADD DIMENSION_USE операторов OMBCREATE CUBE.
Пример:

ADD MEASURE 'MES_SALES'
  SET PROPERTIES (DATATYPE)VALUES ('NUMBER')
  ... ... ...

В прилагаемом файле приведен законченный пример создания куба с состоящего из 3-х измерений и содержащего два показателя.

    Создание преобразований (mapping)

Чтобы осуществить преобразования данных из информационных источников и далее сохранить эти данные в аналитическом хранилище, необходимо определить, так называемые, преобразования (mapping). Для создания преобразований в OMBPlus используется оператор OMBCREATE MAPPING
Пример:

OMBCREATE MAPPING 'LOAD_CUBE_01'
  SET PROPERTIES (DESCRIPTION) VALUES ('Загрузка показателей в куб CUBE_01')
  ... ... ...

В общем случае преобразование может иметь в своем составе много операторов трансформации входящих данных. Рассмотрим эти операторы преобразования более подробно.

1. Добавление оператора <Входные параметры>.
Для добавления оператора <Входные параметры> используется фраза ADD INPUT_PARAMETER оператора OMBCREATE MAPPING.
Пример:

ADD INPUT_PARAMETER OPERATOR 'IN_PARAMS'
      ADD ATTRIBUTE 'P_START_TIME' OF GROUP 'OUTGRP1' OF OPERATOR 'IN_PARAMS' 
      SET PROPERTIES (DATATYPE, LENGTH) VALUES ('VARCHAR2', '22')

2. Добавление оператора <Таблица>. Для добавления оператора <Таблица> используется фраза ADD TABLE OPERATOR оператора OMBCREATE MAPPING.
Пример:

    ADD TABLE OPERATOR 'DIM_TIME_SOURCE' BOUND TO TABLE  '../RR_SOURCE/DIM_TIME_SOURCE'

В вышеописанном примере в преобразование добавляется оператор <Таблицы> со значениями справочника "Период времени".

3. Добавление оператора <Фильтр>. Для добавления оператора <Фильтр> используется фраза ADD FILTER OPERATOR оператора OMBCREATE MAPPING.
Пример:

ADD FILTER OPERATOR 'FILTER_TIME'
      SET PROPERTIES (FILTER_CONDITION) VALUES ('DATE_VALUE  between  
       to_date(P_START_TIME, ''dd.mm.yyyy hh24:mi:ss'') and to_date(P_END_TIME, ''dd.mm.yyyy hh24:mi:ss'')')
     ADD ATTRIBUTE 'P_START_TIME' OF GROUP 'INOUTGRP1' OF OPERATOR 'FILTER_TIME'
      SET PROPERTIES (DATATYPE, LENGTH) VALUES ('VARCHAR2', '22')
     ... ... ... 

4. Добавление оператора связи между элементами. Для добавления оператора связи между элементами используется фраза ADD CONNECTION FROM ATTRIBUTE оператора OMBCREATE MAPPING.
Пример:

  ADD CONNECTION FROM ATTRIBUTE 'P_START_TIME' OF GROUP 'OUTGRP1' OF  
     OPERATOR 'IN_PARAMS'
      TO ATTRIBUTE 'P_START_TIME' OF GROUP 'INOUTGRP1' OF OPERATOR 'FILTER_TIME'
         ... ... ...

5. Добавление оператора представления (view) - источника исходных данных. Для добавления оператора представления (view) используется фраза ADD VIEW OPERATOR оператора OMBCREATE MAPPING.
Пример:

ADD VIEW OPERATOR 'V_CUBE_01' BOUND TO VIEW '../RR_SOURCE/V_CUBE_01' 
     ... ... ...

6. Добавление оператора <Join>. Для добавления оператора <Join> используется фраза ADD JOINER OPERATOR оператора OMBCREATE MAPPING.
Пример:

ADD JOINER OPERATOR 'JOIN' SET PROPERTIES (JOIN_CONDITION) 
      VALUES ('INGRP1.ID  =  INGRP2.TIME_ID')
     ADD ATTRIBUTE 'ID' OF GROUP 'INGRP1' OF OPERATOR 'JOIN' SET PROPERTIES 
       (DATATYPE) VALUES ('NUMBER')
      ADD CONNECTION FROM ATTRIBUTE 'ID' OF GROUP 'INOUTGRP1' OF OPERATOR 
       'FILTER_TIME' TO ATTRIBUTE 'ID' OF GROUP 'INGRP1' OF OPERATOR  'JOIN'
     ADD ATTRIBUTE 'DIM_TIME' OF GROUP 'INGRP2' OF OPERATOR 'JOIN' SET PROPERTIES 
       (DATATYPE, LENGTH) VALUES ('VARCHAR2', '64')
      ADD CONNECTION FROM ATTRIBUTE 'DIM_TIME' OF GROUP 'INOUTGRP1' OF 
       OPERATOR 'V_CUBE_01'
      ... ... ...

В вышеописанном примере в преобразование добавляется оператор <Join> для связи операторов <Фильтр> и представления "V_CUBE_01".

7. Добавление оператора <KEY_LOOKUP>. Оператор <KEY_LOOKUP> используется для получения ключа измерения (Id измерения в хранилище). Для добавления оператора <KEY_LOOKUP> используется фраза ADD KEY_LOOKUP OPERATOR оператора OMBCREATE MAPPING.
Пример:

ADD KEY_LOOKUP OPERATOR 'L_DIM_TIME' SET PROPERTIES (BOUND_NAME,  
        BOUND_LEVEL) VALUES ('DIM_TIME','MONTH')
        ADD ATTRIBUTE 'DIM_TIME' OF GROUP 'INGRP1' OF OPERATOR 'L_DIM_TIME' SET 
          PROPERTIES (DATATYPE, LENGTH) VALUES ('VARCHAR2', '64')
         ADD CONNECTION FROM ATTRIBUTE 'DIM_TIME' OF GROUP 'OUTGRP1' OF  
          OPERATOR 'JOIN'
         TO ATTRIBUTE 'DIM_TIME' OF GROUP 'INGRP1' OF OPERATOR 'L_DIM_TIME'
          ... ... ...

В прилагаемом файле приведен пример создания преобразования. Указанный скрипт не является готовым решением, он лишь задает пример подхода к построению преобразований (в нашем примере не реализован весь алгоритм ETL , в частности, не генерируются связи между операторами KEY_LOOKUP и таблицей приемника).

    Валидация модели

После прогонки скриптов в OMB Plus и генерации модели, необходимо сделать валидацию (проверку) всех объектов. Для этого также можно также воспользоваться скриптовым языком. Для валидации используется оператор OMBVALIDATE.
Пример (валидация всех измерений):

 foreach dimName [OMBLIST DIMENSIONS] {
      OMBVALIDATE DIMENSION '$dimName'
       OUTPUT TO FILE 'C:tempvalidate_dim.log' WRITE ALL
}

В прилагаемом файле приведен пример валидации измерений в репозитарии OWB.

Заключение

Использование OMB Plus позволяет автоматизировать все операции по сопровождению модели в Oracle Warehouse Builder.
Если определение модели находится во внешнем источнике, например, в файлах формата MS Excel или в таблицах СУБД Oracle Database, то можно написать процедуры на PLSQL, которые бы генерировали скрипты OMP Plus по заранее описанной модели. В прилагаемом архиве рассмотрен случай, когда определение модели хранится в СУБД Oracle, и необходимо перенести ее в OWB. Для генерации tcl-скриптов создания модели разработан PL/SQL-пакет, исходный код которого также находится в архиве.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=6593