четверг, 30 сентября 2010 г.

Как использовать PL/SQL процедуры и функции в ODI.

Сегодня хочу опубликовать перевод статьи "How to use PL/SQL procedures and functions in ODI", и, заодно, попробовать описанные там методы на практике.

В одном из пакетов, которые я разрабатывал, используется сохраненная процедура СУБД, которая сканирует таблицу в БД и возвращает некоторое значение. Было бы хорошо избавиться от нее, чтобы пакет был самодостаточным. В этом случае и отдавать на промышленную эксплуатацию пришлось бы всего один сценарий, и менять алгоритм процедуры можно было бы без администратора СУБД.

Итак, перевод:

вторник, 28 сентября 2010 г.

Из чего состоит проект ODI.

В поисках вдохновения решил почитать документацию по Oracle Data Integrator. Хотел, отталкиваясь от описания в документации, рассказать о том, что такое процедура. Но нашел более интересные части, их и переведу.

Составляющие проекта Oracle Data Integrator.
Следующие компоненты входят в дерево проекта ODI:
  1. Папка (Folder)
    Объекты ODI могут находиться в папках или подпапках.
  2. Пакет (Package)
    Пакет это наибольший возможный выполняемый объект ODI. Пакет состоит из последовательности шагов огранизованных в виде цепочки выполнения.

Новые ссылки о работе в Oracle Data Integrator.

Приветствую.

Нашел блог, где публиковалась информация "из области Data Warehouse, Business Intelligence, OLAP, ETL на платформе Oracle". К сожалению, блог не обновляется с марта 2010 года.

Привожу небольшую подборку интересного из раздела посвященного ETL:

понедельник, 27 сентября 2010 г.

Поиск одинаковых JOIN-ов в ODI.

Иногда бывает нужно найти среди множества интерфейсов определенные соединения (join-ы). Например, при тестировании одного интерфейса обнаружилась ошибка при соединении таблицы фактов с одной из таблиц размерностей. В среде разработки таблица измерений имела только одну строку, подпадающую под условие соединения, а в тестовом окружении строк оказалось больше.

В этом случае, чтобы внести исправления во все интерфейсы, которые используют эту таблицу измерений достаточно пойти в модель, найти нужную нам таблицу, и посмотреть, в каких интерфейсах она используется как источник:

четверг, 23 сентября 2010 г.

Узнаем свойства переменной через таблицу SNP_VAR.

Небольшой полезный SQL запрос, который поможет получить некоторые важные свойства переменных прямо из таблицы репозитория ODI под названием SNP_VAR. Подсмотрено вот здесь. По сравнению с оригиналом добавлена важная характеристика переменной, обозначаемая в интерфейсе как Action.

SELECT DISTINCT
CASE
WHEN SNP_VAR.I_PROJECT IS NULL
THEN 'GLOBAL'
ELSE SNP_PROJECT.PROJECT_NAME
END AS PROJECT_NAME,
SNP_VAR.VAR_NAME AS VARIABLE_NAME,
CASE
WHEN SNP_VAR.VAR_DATATYPE='A' THEN 'ALPHANUMERIC'
WHEN SNP_VAR.VAR_DATATYPE='N' THEN 'NUMERIC'
WHEN SNP_VAR.VAR_DATATYPE='D' THEN 'DATE'
ELSE 'TEXT' END AS DATATYPE,
CASE
WHEN SNP_VAR.IND_STORE = 'S' THEN 'Non persistent'
WHEN SNP_VAR.IND_STORE = 'H' THEN 'Historize'
WHEN SNP_VAR.IND_STORE = 'L' THEN 'Last value'
ELSE '?' END AS ACTION,
CASE WHEN SNP_VAR.VAR_DATATYPE='T' THEN V_TXT.TXT
ELSE SNP_VAR.DEF_v END AS DEFAULT_VALUE,
SNP_VAR.lschema_name AS VARIABLE_QUERY_SCHEMA,
SNP_TXT.TXT AS VARIABLE_QUERY,
S_TXT.TXT AS DESCRIPTION
FROM SNP_VAR
LEFT OUTER JOIN SNP_PROJECT ON SNP_VAR.I_PROJECT=SNP_PROJECT.I_PROJECT
LEFT OUTER JOIN SNP_TXT ON SNP_TXT.I_TXT=SNP_VAR.I_TXT_VAR_IN
LEFT OUTER JOIN SNP_TXT S_TXT ON S_TXT.I_TXT=SNP_VAR.I_TXT_VAR
LEFT OUTER JOIN SNP_TXT V_TXT ON V_TXT.I_TXT=SNP_VAR.i_txt_var_val_txt
ORDER BY project_name


Ну и еще один запрос, показывающий значения исторических переменных. Хотя, до конца, я в нем пока не уверен.

SELECT
d.Var_Name AS "NAME",
d.FIRST_DATE AS "DATE",
CONTEXT_CODE AS "CONTEXT",
CASE
WHEN v.VAR_DATATYPE='A' THEN d.VAR_V
WHEN v.VAR_DATATYPE='N' THEN to_char(d.VAR_N)
WHEN v.VAR_DATATYPE='D' THEN to_char(d.VAR_D)
ELSE 'RUN: select TXT from snp_exp_txt where I_TXT = ' || to_char(d.i_txt_var_t) END AS "VALUE"
FROM snp_var v LEFT OUTER JOIN snp_project p ON v.I_PROJECT=p.I_PROJECT,
SNP_VAR_DATA d
WHERE d.var_name = UPPER(nvl(p.PROJECT_NAME, 'GLOBAL')) || '.' || v.Var_Name


См. также: структура таблиц рабочего репозитория ODI.

среда, 22 сентября 2010 г.

IBM покупает Netezza.

Сегодня день, богатый на ссылки на новостные заметки. В статье немного упоминаются различные СУБД для Хранилищ данных. А для построения ХД лучше всего, по моему мнению, подходит ODI.
http://ko.com.ua/node/52423

Обучающее видео по Oracle Data Integrator.

Из сообщения Андрея Пивоварова ссылка на демо ролики по ODI от Крейга Стюарта. Я насчитал 16 роликов, возможно, они окажутся полезными для вас.
http://www.business-intelligence-quotient.com/?p=933
Язык - английский.

вторник, 21 сентября 2010 г.

Скрытые переменные сценария починили.

Сегодня обнаружил, что описанное в этом посте поведение Дизайнера ODI, в версии 10.1.3.6.4 исправили. Теперь, если при запуске сценария, сделать отмену в диалоговом окне ввода значений параметров, повторный запуск этого же сценария не приведет к показу всех переменных сценария.

Значит, это все же была ошибка.

воскресенье, 19 сентября 2010 г.

Диаграмма выполнения пакета в Oracle Data Integrator.

Готовя предыдущий пост о советах по работе в приложении Дизайнер намеренно пропустил одну функцию этого приложения, которая помогает делать диаграмму выполнения пакета более стройной.

С самого начала работы с ODI я настойчиво упорядочивал пакеты, стараясь делать диаграмму "прямой и стройной". И делал это всегда вручную. Обнаружив описываемую ниже функциональность я попробовал ее использовать, разочаровался, и решил вообще о ней не упоминать. Но, спустя время, понял, что в 80% случаев она может быть полезна для разработчика.

Что я имею ввиду? Обычно диаграмма пакета это графическое отображение объектов пакета в виде пиктограмм и связей между ними, в виде стрелок. Направление стрелки показывает порядок выполнения действий над объектами пакета, разные цвета этих стрелок обозначают переход выполнения в случае успешного и неуспешного завершения текущего шага.


Прямая и стройная диаграмма это расположение объектов пакета на одной прямой. С этой задачей может справиться специальная функция Дизайнера, которая называется Reorganize:


К сожалению, эта возможность хорошо работает только для последовательных запусков переменных, процедур и интерфейсов в пакете. Если попытаться воспользоваться этой функцией для чего-то более сложного, с условными переходами или циклами - получится совершенно запутанный клубок из объектов и переходов между ними.

Вот как выглядит упорядоченный вручную пакет:


Вот что происходит после использования функции Reorganize:


Как видно, первый вариант был более удобочитаемым. С другой стороны это, возможно, и правильно. Выстраивая диаграмму пакета вручную, разработчик имеет возможность еще раз проверить алгоритм работы пакета основываясь на его визуальном представлении, практически, имея перед глазами блок-схему программы. С этой точки зрения неудобство заключается только в отсутствии возможности привязывать объекты диаграммы к направляющим или сетке. Остается только пользоваться возможностью взаимного упорядочивания объектов по вертикали или горизонтали:


Update:
Подробнее о диаграмме пакета как схеме выполнения загрузки (workflow)

пятница, 17 сентября 2010 г.

Дизайнер ODI: советы.

Сегодня я подготовил несколько советов по работе в программе Дизайнер, одной из четырех клиентских оболочек Oracle Data Integrator.

Совет 1. Именование объектов.
Начнем с совсем простого, т.е. с того, как называть свои пакеты, интерфейсы и функции. Хорошей практикой считается подход, когда интерфейс называется так же, как и целевая таблица, которая этим интерфесом заполняется. По названию процедуры должно быть понятно, что она и примерно как делает. Пакет именуется по тем же принципам.
Совсем недавно я обнаружил, что наименование сценария для объекта автоматически генерируется в верхнем регистре:

четверг, 16 сентября 2010 г.

Что такое Oracle Data Integrator (ODI)?

Подумал, что сложно, наверное, найти в сети ответ на этот вопрос, тем более ответ без стандартных маркетинговых фраз.

В моей работе ODI - это программа (набор из нескольких программ, сервер приложений), которая позволяет копировать данные из таблиц разных СУБД разных производителей, складывать их в нужную БД (Хранилище Данных), и, после этого, производить над этими данными некие преобразования. Чтобы, в конце этого процесса, получить нужные для пользователей отчеты.

Набор программ ODI (не полный)

вторник, 14 сентября 2010 г.

ODI лучше OWB?

Небольшое сравнение Oracle Data Intagrator и Oracle Warehouse Builder в виде 11 сформулированных тезисов:
Oracle Data Integrator и Oracle Warehouse Builder 11 тезисов сравнения.
Запись довольно старая, но все же.

Параллельное выполнение интерфейсов – новое решение.

Сегодня я хочу предложить перевод статьи Cezar Santos об одновременной загрузке данных в одну таблицу несколькими интерфейсами.


Описание проблемы:
Oracle Data Integrator использует имя целевой таблицы как базу для названия временных таблиц ($I, $E, C$), и, поэтому, если больше одного интерфеса, загружающего одну и ту же таблицу, работают одновременно, операции создания, добавления строк или удаления этих временных таблиц могут выполняться вразброд, ломая таким образом весь процесс загрузки.

Решение:

воскресенье, 12 сентября 2010 г.

Добавляем keywords-ы к дочерним сессиям.

Процесс загрузки данных в ХД можно описывать с разных сторон. В данной статье я хотел бы рассмотреть две такие характеристики, как количество источников данных и периодичность. Рассмотреть не с точки зрения общих принципов построения ХД, а с точки зрения того, как, используя Oracle Data Integrator как инструмент ETL, немного упростить работу по разработке и сопровождению процесса ежедневной загрузки данных в хранилище данных.

Фактически, keywords-ы похожи на облако тэгов, или ярлыков, используя которые можно выбирать из всего множества запущенных сессий только определенные.

Для добавления тэгов к запускаемым сценариям необходимо выполнить следующие шаги:

пятница, 10 сентября 2010 г.

Oracle Data Integrator 11g доступен для скачивания.

Всем привет.
Короткое сообщение, Oracle на своем сайте выложил архив новой версии Oracle Data Integrator. Размер - 1.74Gb.
Если я не ошибаюсь, вчера его там еще не было.
Вчера же, поздно вечером, Oracle проводил по новому ODI вебкаст.

Из доступного на сайте pdf файла с презентацией новых возможностей 11 версии я, после беглого просмотра, выбрал только одну - теперь можно немедленно останавливать выполнение сессий, а не просто не выполнять следующий после текущей команды шаг. Т.е. теперь зависшие SQL запросы можно будет обрывать прямо из клиента, что не может не радовать.

Ссылка: http://www.oracle.com/technetwork/middleware/data-integrator/overview/index.html, дальше на страницу Download.

Собираюсь скачать.

среда, 8 сентября 2010 г.

Как узнать время выполнения дочерних сессий из таблицы SNP_SESSION.

Все - таки, при достаточно большом количестве сессий, которые необходимо проанализировать (проверить время выполнения, например), пользоваться клиентским приложением, даже с использованием кнопки Back, достаточно затратно по времени.

Хорошо, если у разработчика или администратора ETL процесса есть доступ на чтение из таблиц репозитория ODI.

вторник, 7 сентября 2010 г.

Используем кнопку Back в Операторе.

Небольшая заметка о удобстве использования кнопки Back, которая имеет вот такое изображение в Операторе:

при ежедневной работе. Как дополнение к вот этим постам (часть 1, часть 2) с советами по работе в этом приложении.

Недавно мне понадобилось проверить время работы некоторого набора сессий. Как часть ежедневного расчета данных в ХД эти сессии запускались из одного главного сценария.

Порядок работы после запуска Оператора был следующим:
1. Находим в закладках Hierarchical Sessions лог нашего главного процесса загрузки и выбираем его дочерние сессии (Child Session). Нажимаем на значок + и раскрываем список дочерних сессий.

пятница, 3 сентября 2010 г.

Один сценарий для ежедневного и выборочного расчета.

В моей практике ODI используется для ежедневной загрузки и преобразования данных в Хранилище Данных. Обычно такое преобразование имеет одним из параметров дату загрузки.

Например, каждый день могут расчитываться ежедневные отчеты, соответственно, в сценариях загрузки таблиц отчетов должен присутствовать параметр даты. Если загрузка происходит в штатном режиме, в ETL пакете используется некая переменная, назовем ее #Loading_Date, которая обновляется (refresh) из параметров текущей загрузки (из некоторой таблицы в БД) и на эту дату производится расчет.

Если есть необходимость пересчитать отчет за произвольную дату, можно поступить двумя путями.

среда, 1 сентября 2010 г.

Что такое переменная в Oracle Data Integrator.

Изначально этот пост должен был рассказать о некоторых свойствах исторических переменных, которые могут привести к довольно любопытным и трудноуловимым багам в ETL. Но, со временем, показалось хорошей идеей рассказать немного больше о переменных ODI.

Итак, что пишет нам документация, а именно, файл snps_refmanual.pdf, о переменных.

Переменные могут быть использованы в любых выражениях (SQL и других), также как и в метаданных. Значение переменная получает во время выполнения той команды, в которой она используется, когда эту команду выполняет агент. Свойства переменной отображаются в закладках Definition и Refresh в Дизайнере, глобальные переменные располагаются на том же уровне, где и проекты, проектные (локальные) переменные - внутри дерева проекта.

2010-09-01.


Первый год из многих. Спасибо друзья!
First year of many…. Thank you Friends!
-
Дата публикации: 2010-09-01, Комментариев: 1


ODI 11g - Часть 4/11 - Обновление с версии 10.
11g Oracle Data Integrator – Part 4/11g – Upgrading from 10g
Как сделать апгрейд с 10 версии ODI на версию 11g с помощью клонирования репозиториев и использования утилиты Oracle Fusion Middleware Upgrade Assistant.
Дата публикации: 2010-09-07, Комментариев: 16


Секреты ODI - Конструктор моделей от Крейга Стюарта.
Using one of ODI’s lesser-known secrets: the Common Format Designer (CFD) – by Craig Stewart
Использование Конструктора Моделей (Common Format Designer (CFD)) от Крейга Стюарта.
Дата публикации: 2010-09-10, Комментариев: 5


ODI 11g - Часть 5/11 - odiConsole, новый Metadata Navigator.
11g Oracle Data Integrator – Part 5/11g – odiConsole, the new Metada Navigator
Пошаговая инструкция как настроить odiconsole для работы в Oracle Weblogic Server и как установить внешнего агента для запуска сценариев из консоли.
Дата публикации: 2010-09-15, Комментариев: 3


ODI 11g - независимые агенты и использование агента как сервиса.
11g Oracle Data Integrator – Standalone Agent but, and about the Windows Service???
Особенности настройки агентов ODI, в том числе настройка работы агентов как сервисов Windows.
Дата публикации: 2010-09-21, Комментариев: 5


Расположение файлов драйверов в ODI 11g.
Drivers Location in ODI 11g
Где располагаются JDBC драйверы ODI на Unix и Windows серверах. В комментариях также затрагивается тема нахождения драйверов в Windows 7.
Дата публикации: 2010-09-29, Комментариев: 14


Подзапросы и производные таблицы в ODI 11g.
Subselect, derived tables, and subqueries in ODI 11G
Показан механизм, позволяющий использовать интерфейс для заполнения временной таблицы в другом интерфейсе в качестве производной (derived) таблицы, при этом запрос, заполняющий производную таблицу автоматически трансформируется в подзапрос в основном интерфейсе.
Дата публикации: 2010-09-09, Комментариев: 2


Примеры кода для ODI 11g SDK.
Oracle Data Integrator (ODI) 11g SDK code samples
Ссылки на примеры кода для ODI 11g SDK на сайте Oracle, а также ссылки на описание Java API на том же сайте.
Дата публикации: 2010-09-11, Комментариев: 1