Использование IBM InfoSphere Warehouse Design Studio с pureXML-данными: Часть 1. Создание потока ETL-данных для заполнения хранилища гибридных данных

Узнайте, как интегрировать важные XML-данные в хранилище данных при помощи программ IBM® InfoSphere™ Warehouse Design Studio и DB2® 9.7 pureXML®. В данной серии статей, состоящей из двух частей, приведены пошаговые инструкции по использованию pureXML в качестве как исходных, так и целевых источников данных для извлечения, преобразования и загрузки (ETL) опеВ этой серии статей, состоящей из двух частей, приведены пошаговые инструкции по использованию pureXML в качестве как исходных, так и целевых источников данных для операций извлечения, преобразования и загрузки (ETL), разработанных в InfoSphere Warehouse Design Studio. В статье объясняется, как создать единый поток данных, использующий основанную на XML таблицу исходных данных для заполнения двух таблиц целевых данных в хранилище. Одна из целевых таблиц содержит только реляционные данные, а другая - как реляционные, так и XML-данные.

Синтия M. Саракко (Cynthia M. Saracco), старший инженер-программист, IBM

C. M. Саракко (Cynthia M. Saracco) работает в исследовательской лаборатории компании IBM в Силиконовой долине, в объединении DB2 XML. Сфера ее служебных интересов – управление базами данных, XML, разработка веб-приложений и смежные темы.


developerWorks Master author
        level

18.12.2012

Введение

Растущее использование XML для сбора ответственных бизнес-данных и обмена ими побуждает компании рассматривать возможность интеграции XML-данных в свои системы хранения данных. В данной статье рассказывается, как можно использовать ПО IBM InfoSphere Warehouse Design Studio для графического создания потоков данных, извлекающих, преобразующих и загружающих XML-данные под управлением DB2. Вы узнаете, как извлечь pureXML-данные из DB2 9.7, при необходимости преобразовать полученные XML-данные и как заполнить хранилище гибридных (реляционных/XML) данных.

Для эффективного восприятия статьи полезно иметь некоторое представление о системах хранения данных, технологии ETL (extract-transform-load – извлечение-преобразование-загрузка) и XML. Для тех, кто не знаком с DB2 pureXML или IBM InfoSphere Warehouse Design Studio, в следующих разделах приведена краткая вводная информация, а ссылки на дополнительные материалы приведены в разделе Ресурсы.

Введение в DB2 pureXML

СУБД DB2 предоставляет общий интерфейс прикладного программирования и платформу управления базами данных, содержащих данные, смоделированные в виде таблиц и XML-иерархий. Такая архитектура управления гибридными данными позволяет интегрировать XML-сообщения и документы в базу данных без разложения (декомпозиции) XML на столбцы различных таблиц. Используя DB2, разработчики приложений могут легко и эффективно извлекать нужные фрагменты XML-данных и без труда интегрировать XML- и реляционные данные. На рисунке 1 показана архитектура гибридной базы данных DB2.

Рисунок 1. Архитектура гибридной базы данных DB2 поддерживает реляционные и XML-данные
Рисунок 1. Архитектура гибридной базы данных DB2 поддерживает реляционные и XML-данные

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

pureXML-данные DB2 все шире используются в системах хранения данных. XML часто используется в качестве формата представления и обмена важными бизнес-данными в приложениях, основанных на сообщениях, Web-приложениях, сервис-ориентированных архитектурах (SOA) и проектах интеграции приложений.

Поскольку объем важных бизнес-данных, представленных в XML, постоянно растет, неудивительно, что компании стремятся использовать технологию XML для управления данными, предоставления данных, выполнения запросов и составления отчетности. Некоторые компании создают в хранилище данных специальные участки, использующие pureXML в качестве механизма хранения. Некоторые компании для удовлетворения новых бизнес-требований расширяют реляционные таблицы одним или несколькими pureXML-столбцами.

Введение в InfoSphere Warehouse Design Studio

Программа InfoSphere Warehouse Design Studio (Design Studio) предоставляет проектировщикам и разработчикам хранилищ данных средства моделирования, генерирования запросов, поиска данных и ETL-сервисы через интерфейс, основанный на Eclipse. Используя графические средства, проектировщики могут выполнять различные функции, включая подключение к исходной и целевой базам данных, анализ физических моделей данных и создание ETL-заданий DB2 (потоков данных). В этой статье основное внимание уделяется использованию Design Studio для создания ETL- потоков данных.

В Design Studio есть разнообразные SQL-операторы Data Warehousing и XML-операторы, предназначенные для управления реляционными и pureXML-данными. К таким операторам относятся:

  • чтение данных из исходных таблиц или файлов;
  • запись данных в целевые таблицы или файлы;
  • выполнение запросов, например соединения (join), объединения (union), агрегирования (aggregation).

XML-операторы являются новшеством DB2 V9.7. К ним относятся:

Оператор XML Relation Mapping
Выполняет разложение XML-данных на реляционные столбцы целевого набора данных.
Оператор XML Composer
Создает XML-данные из реляционных или XML-данных.
Оператор XQuery
Выполняет XQueries для извлечения определенных XML-данных. Сгенерированный код использует для вызова Xquery функцию SQL XMLQuery().
Два оператора XML Node
Переименовывают XML-узел (например, элемент или атрибут) и извлекают один или несколько узлов из XML-документа.
Два оператора XML File
Читают и записывают XML-файлы.

В примере потока данных, приведенном в данной статье, с помощью оператора XML Relational Mapping и нескольких операторов Data Warehousing производится заполнение целевой реляционной таблицы и гибридной (реляционной/XML) таблицы из одной исходной XML-таблицы.

Настройка среды разработки и среды времени исполнения

Для создания примеров сценариев, рассматриваемых в данной статье, установите DB2 9.7 Enterprise Server Edition и IBM InfoSphere Warehouse Design Studio 9.7. Обе эти программы можно установить в одной операционной системе Windows®. Загрузите также данные примера и сценарий конфигурации, включенные в данную статью.

Данные рабочего примера содержат информацию о счетах клиентов и их денежных вкладах. Данные основаны на подмножестве открытого теста производительности Transaction Processing over XML (TPoX). Вскоре вы более подробно познакомитесь с рабочими данными и со структурой системы хранения данных. Ссылки на дополнительную информацию приведены в разделе Ресурсы.


Введение в сценарий

Сценарий, рассматриваемый в данной статье, использует рабочие данные, хранящиеся в DB2 pureXML, в качестве исходных данных для ETL-задания (извлечение, преобразование и загрузка), разработанного для заполнения системы хранения данных, основанной на DB2. Мы с помощью Design Studio выполним извлечение данных, хранящихся в одном XML-столбце DB2, и отобразим эти данные на две таблицы системы хранения данных DB2, как показано на рисунке 2. Одна их этих таблиц содержит только обычные реляционные столбцы, а вторая содержит реляционные столбцы и один XML-столбец.

Рисунок 2. Пример сценария вызывает рабочие данные, хранящиеся в DB2 pureXML, с целью использования в качестве входных данных для системы хранения данных DB2
Рисунок 2. Пример сценария вызывает рабочие данные, хранящиеся в DB2 pureXML, с целью использования в качестве входных данных для системы хранения данных DB2

Эта модель данных представляет типичный сценарий, в котором фрагменты XML-данных разлагаются в реляционную структуру. Многие инструментальные средства поддержки бизнес-деятельности оптимизированы для работы с реляционными структурами, поэтому разложение часто запрашиваемых XML-данных в реляционные столбцы может быть эффективным решением. Однако со временем бизнес-требования могут изменяться, что затрудняет определение администраторами XML-значений, которые следует разложить в реляционные столбцы. Хранение в системе хранения данных цельных XML-данных позволяет пользователям непосредственно обращаться к важным бизнес-данным, не разложенным в реляционный формат.

Для упрощения примеров сценариев в данной статье мы будем использовать одну и ту же базу данных DB2 для хранения как рабочих данных, так и данных системы хранения. Естественно, в рабочей среде они будут храниться в разных базах данных и, как правило, на разных серверах. Однако использование единой тестовой базы данных позволит нам сконцентрироваться на том, как Design Studio может управлять pureXML-данными.

Исходные и целевые таблицы

В примере сценария рабочие XML-данные хранятся в таблице TPOXADMIN.ACCOUNT, служащей исходной таблицей для ETL- потока данных. Таблица ACCOUNT содержит один XML-столбец (INFO). Для создания этой таблицы (а также целевых таблиц хранилища данных) можно использовать мастеров моделирования данных Design Studio. Однако в данном сценарии для всех необходимых таблиц просто используются DDL-выражения DB2.

В листинге 1 показано, как создать таблицу TPOXADMIN.ACCOUNT.

Листинг 1. SQL для создания исходной таблицы ACCOUNT
 create table tpoxadmin.account(info xml)

Столбец INFO содержит подробную информацию о клиентском счете, включая имя, дату открытия, рабочий баланс, портфельные авуары и другую информацию. (В тесте производительности TPoX подобная информация направляется в более обобщенные документы по счету клиента.) На рисунке 3 показан фрагмент одного XML-документа, хранящегося в таблице ACCOUNT, упоминаемой в данной статье.

Рисунок 3. Фрагмент XML-записи, хранящейся в таблице TPOXADMIN.ACCOUNT
Рисунок 3. Фрагмент XML-записи, хранящейся в таблице TPOXADMIN.ACCOUNT

Для упрощения тестирования целевая база данных тоже сконфигурирована как TPoX. Исходная информация из столбца INFO таблицы TPOXADMIN.ACCOUNT будет отображаться на две таблицы: DWADMIN.ACCT, содержащую информацию обо всем счете, и DWADMIN.HOLDINGS, содержащую информацию о различных инвестициях (портфельных авуарах) данного счета. В листинге 2 показано, как определить эти таблицы.

Листинг 2. Определения для целевых таблиц хранилища данных
-- DWADMIN.ACCT содержит общую информацию о счетах.  
create table dwadmin.acct (
     id                 int,   
     title              varchar(100), 
     currency           char(3), 
     workingbalance     int,  
     officer            varchar(50), 
     datechanged        date,
     timechanged        time, 
     totalholdings      int,
     holdingtypes       int,
     fullrecord         xml 
)

-- DWADMIN.HOLDINGS отслеживает конкретные инвестиции для данного счета 
create table dwadmin.holdings (
     id                 int,    
     symbol             varchar(10), 
     type               varchar(25), 
     quantity           decimal(12,3) 
)

Для понимания того, как исходные XML-данные в столбце INFO таблицы TPOXADMIN.ACCOUNT отображаются в различные столбцы таблиц хранилища данных, посмотрите на таблицу 1 и таблицу 2. Обратите внимание на то, что структура целевой таблицы DWADMIN.ACCT подразумевает не только простое извлечение значений конкретных XML-данных из исходных документов. В частности, столбцы DATECHANGED и TIMECHANGED требуют несложного преобразования значений данных, тогда как столбцы TOTALHOLDINGS и DISTINCTHOLDINGS требуют агрегирования определенных данных.

Таблица 1. Исходные XML-данные для столбцов целевой таблицы DWADMIN.ACCT
Название столбца в DWADMIN.ACCTXPath-выражение или источник данных
ID/Account/@id
TITLE/Account/AccountTitle
CURRENCY/Account/Currency
BALANCE/Account/Balance/WorkingBalance
OFFICER/Account/AccountOfficer
DATECHANGEDИзвлекается из /Account/LastUpdate
TIMECHANGEDИзвлекается из /Account/LastUpdate
TOTALHOLDINGSВычисляется. (Счетчик /Account/Position/Type)
HOLDINGTYPESВычисляется. (Счетчик не дублирующихся /Account/Position/Type)
FULLRECORDВесь XML-документ (/Account)

В таблице 2 показаны исходные XML-данные для столбцов целевой таблицы DWADMIN.HOLDINGS.

Таблица 2. Исходные XML-данные для столбцов целевой таблицы DWADMIN.HOLDINGS
Название столбца в DWADMIN.HOLDINGSXPath-выражение или источник данных
ID/Account/@id
SYMBOL/Account/Holdings/Position/Symbol
TYPE/Account/Holdings/Position/Type

Конструкция потока данных

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

Единый поток данных, разрабатываемый в данной статье, использует несколько операторов Design Studio, включая операторы Table Source и Table Target, операторы XML Relational Mapping, оператор Group By и оператор Table Join. На рисунке 4 показана общая схема, рассматриваемая более подробно далее.

Рисунок 4. Поток данных для сценария ETL
Рисунок 4. Поток данных для сценария ETL

Оператор Table Source (показанный в левом верхнем углу рисунка 4) идентифицирует таблицу TPOXADMIN.ACCOUNT в качестве источника входных данных. XML-данные в этой таблице отправляются в два оператора XML Relational Mapping. Один из этих операторов (показанный в нижней ветви на рисунке 4) снабжает данными оператор Group By, выполняющий агрегирования, перечисленные в таблице 1. Однако одна из целевых таблиц (DWADMIN.ACCT) в целях совместимости требует также, чтобы обслуживалась вся XML-запись. Поскольку XML-столбцы не могут принимать участие в предложениях Group By, необходим второй оператор XML Relational Mapping (показанный в верхней ветви на рисунке 4). Этот оператор будет извлекать значение идентификатора счета из XML-данных и сохранять всю XML-запись. Идентификатор счета из этой операции отображения можно затем использовать в операторе соединения с идентификатором счета, включенным в выходные данные операции Group By, создавая конечный набор данных, который будет заполнять целевую таблицу ACCT.

Заполнение целевой таблицы DWADMIN.HOLDINGS выполняется проще. Выходные данные от одного из операторов XML Relational Mapping (показанного в нижней ветви рисунке 4) можно напрямую направляться в целевую таблицу.


Шаг 1. Подготовка среды базы данных DB2

В разделе Загрузка данной статьи содержится сценарий DB2, создающий необходимую рабочую (исходную) таблицу и таблицы хранилища данных (целевые). Он также заполняет рабочую таблицу примерной XML-информацией о счетах. Загрузите файл DWsetup.db2, откройте окно команд DB2 и выполните следующую команду:

Листинг 3. Активизация сценария DB2
 db2 -td@ -vf DWsetup.db2

Обратите внимание на то, что данный сценарий предназначен для сервера DB2 9.7, работающего в операционной системе Windows.


Шаг 2. Подготовка среды Design Studio

Перед созданием потока данных следует подготовить среду Design Studio. Ниже рассказывается, как выполнить стандартные процессы Design Studio для установки соединения с базой данных TPoX, создания проекта Data Warehouse и физической модели данных базы данных TPoX посредством функциональности реверсивного проектирования (reverse engineering), а также создания потока данных.

  1. В панели Data Source Explorer выделите базу данных TPoX и щелкните правой кнопкой мыши на ней.
  2. Введите соответствующую информацию, включая имя пользователя и пароль, как показано на рисунке 5.
Рисунок 5. Установка соединения с базой данных TPoX
Рисунок 5. Установка соединения с базой данных TPoX
  1. Проверьте возможность подключения к базе данных.
  2. В панели Data Project Explorer щелкните правой кнопкой мыши для создания нового проекта системы хранения данных с соответствующим именем.
  3. Выделите созданный проект и перейдите в папку Data Flows.
  4. Щелкните правой кнопкой мыши для создания нового потока данных с соответствующим именем.
  5. Для данного сценария укажите, что мы собираемся работать с интерактивной (online) базой данных, и выберите соединение с базой данных TPoX. Проигнорируйте все ошибки, которые могут появиться из-за того, что поток данных пуст.
  6. В проекте перейдите в папку Data Models.
  7. Щелкните правой кнопкой мыши для создания новой физической модели данных.
  8. Укажите, что мы хотим создать модель путем реверсивного проектирования базы данных DB2 9.7.
  9. При запросе укажите соединение с базой данных TPoX и выберите в качестве целевых схем TPOXADMIN и DWADMIN.

Шаг 3. Добавление исходной таблицы в поток данных

Выполните следующие действия для программирования потока на чтение исходных данных из таблицы TPOXADMIN.ACCOUNT.

  1. В панели Palette (палитра) выберите SQL Warehousing Operators > Sources and Tables > Table Source.
  2. Перетащите его в левую часть пустого потока данных. Появится окно мастера.
  3. Выберите TPOXADMIN.ACCOUNT в качестве исходной таблицы базы данных, как показано на рисунке 6.
Рисунок 6. Указание TPOXADMIN.ACCOUNT в качестве исходной таблицы
Рисунок 6. Идентификация TPOXADMIN.ACCOUNT в качестве исходной таблицы
  1. Убедитесь, что конечный набор данных содержит столбец INFO (XML-столбец) на выходе.
  2. Сохраните проделанную работу.

Шаг 4. Добавление оператора XML Relational Mapping

Выполните приведенные ниже действия для добавления оператора XML Relational Mapping и подключения его к выходу исходной таблицы. Запрограммируйте этот оператор на извлечение идентификатора счета из каждого XML-документа и на включение полного содержимого каждого XML-документа в конечный набор данных. Пример целевой таблицы DWADMIN.ACCT содержит несколько реляционных столбцов, а также исходные XML-записи. Этот оператор извлекает значения идентификатора счета для операции соединения (join), которая позволяет сформировать желаемый набор данных.

  1. Выберите в палитре операторXML Operators > XML Relational Mapping.
  2. Перетащите его правее пиктограммы Table Source.
  3. Соедините исходную таблицу с оператором XML Relational Mapping.
  4. Дважды щелкните левой кнопкой мыши на операторе XML Relational Mapping для его программирования.
  5. Укажите столбец INFO как XML-столбец.
  6. Укажите пространство имен (namespace) по умолчанию для входных XML-документов. Как показано на рисунке 3, все записи о счетах имеют пространство имен XML.
  7. Щелкните на пиктограмме с желтым знаком + для добавления строки в панель Namespaces и введите http://tpox-benchmark.com/custacc в качестве URI.
  8. Оставьте поле Prefix незаполненным, чтобы использовать пространство имен по умолчанию, как показано на рисунке 7.
Рисунок 7. Заданиие пространства имен по умолчанию для XPath-выражений
Рисунок 7. Заданиие пространства имен по умолчанию для XPath-выражений
  1. Выполните приведенные далее действия для указания XQuery-выражения и определения столбца, которые будут активизировать внутреннюю функцию XMLTable(). Оператор XML Relational Mapping генерирует DB2-запрос, содержащий вызов функции XMLTable().
    1. Укажите /Account/@id в качестве XQuery-выражения.
    2. Определите выходной набор данных так, чтобы он содержал столбец ID с типом integer, порождаемый из узла, указанного в XQuery-выражения. Поле Path следует установить в значение . (точка). Это заставит DB2 преобразовать информацию об идентификаторе счета, размещенную в /Account/@id, в значения типа integer.
    3. Убедитесь в том, что спецификация отображает XQuery-выражение как /Account/@id, а в поле Column definition указан id как Column Name и INTEGER как Data Type (см. рисунок 8).
Рисунок 8. Извлечение информации об идентификаторе счета и преобразование ее в значение типа integer
Рисунок 8. Извлечение информации об идентификаторе счета и преобразование ее в значение типа integer
  1. Убедитесь, что выходные данные этого оператора потока данных содержат столбец ID и столбец с первоначальными XML-данными. Окончательный набор данных в примере имеет два столбца: fullrecord (XML) и id (integer), как показано на рисунке 9.
Рисунок 9. Определение окончательного набора данных с двумя столбцами
Рисунок 9. Определение окончательного набора данных с двумя столбцами

Шаг 5. Добавление второго оператора XML Relational Mapping

В нашем примере потока данных нужны два оператора XML Relational Mapping. Второй оператор извлекает несколько значений реляционных столбцов из различных XML-узлов. Этот оператор извлекает также дату и время из метки времени, заполняя два реляционных столбца из одного значения XML-данных. Наконец, этот оператор извлекает одно реляционное значение, использующееся для двух операций агрегирования, вычисляемых в последующей операции Group By.

Аналогично уже определенному первому оператору XML Relational Mapping, данный оператор использует в качестве входного источника данных столбец INFO таблицы TPOXADMIN.ACCOUNT.

Выполните следующие действия для добавления второго оператора XML Relational Mapping:

  1. Выберите в палитре оператор XML Operators > XML Relational Mapping.
  2. Перетащите его и поместите под уже определенный в потоке оператор XML Relational Mapping.
  3. Соедините исходную таблицу с этим новым оператором XML Relational Mapping.
  4. Дважды щелкните левой кнопкой мыши на новом операторе XML Relational Mapping для его программирования.
  5. Укажите столбец INFO как XML-столбец.
  6. Укажите пространство имен по умолчанию http://tpox-benchmark.com/custacc.
  7. Укажите XQuery-выражение и определение столбца, которые будут активизировать внутреннюю функцию XMLTable(). Поскольку каждый счет может иметь несколько инвестиций, выполните следующие действия для указания XQuery-выражения, которое будет генерировать одну строку для каждой инвестиции в каждом счете:
    1. Укажите /Account/Holdings/Position/Type как генерирующее строки XQuery-выражение.
    2. Определите выходной набор данных так, чтобы он содержал реляционные столбцы, соответствующие столбцам в целевых таблицах DWADMIN.ACCT и DWADMIN.HOLDINGS, за исключением двух вычисляемых столбцов (DISTINCTHOLDINGS и TOTALHOLDINGS). В таблице 3 показаны необходимые столбцы, соответствующие типы данных и path-выражения.
Таблица 3. Таблица определения столбцов для /Account/Holdings/Postion/Type
Название столбцаТип данныхДлинаМасштабPath-выражение
idINTEGER../../../@id
titleVARCHAR50../../../AccountTitle
currencyCHAR3../../../Currency
workingbalanceINTEGER../../../Balance/WorkingBalance@id
officerVARCHAR50../../../AccountOfficer
datechangedTIMESTAMP../../../LastUpdate
timechangedTIMESTAMP../../../LastUpdate
holdingtypeVARCHAR25.
symbolVARCHAR30../Symbol
qtyDECIMAL123../Quantity
  1. Укажите выходные данные этого оператора потока данных, отобразив все доступные столбцы за исключением столбца INFO на соответствующие конечные столбцы, как показано на рисунке 10.
Рисунок 10. Определение конечного набора данных, генерируемого данным оператором
Рисунок 10. Определение конечного набора данных, генерируемого данным оператором
  1. Измените определение столбцов DATECHANGED и TIMECHANGED в конечном наборе данных так, чтобы их значения получались из соответствующих SQL-выражений, использующих операции DATE/TIME. Эти выражения можно указать двойным щелчком левой кнопкой мыши на каждой строке, что приводит к появлению еще одного окна с областью для создания или ввода SQL-выражений. Используйте DATE(table.column) для столбца DATECHANGED и TIME(table.column) для столбца TIMECHANGED в конечном наборе данных. Выражение date("XMLTABLE_08"."datechanged") определяет конечный столбец DATECHANGED, как показано на рисунке 11.
Рисунок 11. Указание соответствующего выражения DATE/TIME в текстовой панели SQL
Рисунок 11. Указание соответствующего выражения DATE/TIME в текстовой панели SQL

Шаг 6. Добавление оператора Group By

После определения всех необходимых реляционных значений, извлекаемых из исходного XML-столбца, можно приступить к агрегированию двух значений, необходимых для одной из целевых таблиц хранилища данных (таблица DWADMIN.ACCT). Эта таблица отслеживает количество инвестиций по каждому счету и количество различных типов вкладов. Например, счет с инвестициями в четыре акционерных фонда и три фонда облигаций имеет семь вкладов и два различных типа вкладов. Оператор Group By позволяет сгенерировать конечный набор данных, содержащий необходимые операции агрегирования. Выполните следующие действия для создания и программирования оператора Group By:

  1. Выберите в палитре SQL Warehousing Operators > Transformations > Group By.
  2. Перетащите его правее второго оператора XML Relational Mapping.
  3. Соедините оператор XML Relational Mapping с оператором Group By.
  4. Дважды щелкните левой кнопкой мыши на операторе Group By для его программирования.
  5. Укажите столбцы, включаемые в конечный набор данных данного оператора, выполнив следующие действия:
    1. Удалите столбец INFO (XML-столбец) из списка Select List, отображаемого в конечном наборе данных. XML-столбцы нельзя включать в SQL-выражения Group By. В последующей операции потока данных мы будем использовать оператор join, чтобы гарантировать включение цельных XML-записей счета (содержащихся в столбце INFO) в целевую таблицу хранилища данных.
    2. Удалите столбцы HOLDINGTYPE, SYMBOL и QTY из конечного набора данных. Эти столбцы не нужны для целевой таблицы DWADMIN.ACCT.
    3. Измените входное выражение столбца TOTALHOLDINGS для выполнения подсчета значений HOLDINGTYPE. Выражение должно быть аналогично следующему: COUNT("INPUT_023_0"."holdingtype").
    4. Измените входное выражение столбца DISTINCTHOLDINGS для выполнения подсчета различных значений HOLDINGTYPE. Выражение должно быть аналогично следующему: COUNT(distinct "INPUT_023_0"."holdingtype").

    На рисунке 12 показано, как настроить оператор Group By. Обратите внимание на то, что столбцы TOTALHOLDINGS и DISTINCTHOLDINGS вычисляются с использованием выражений COUNT().

Рисунок 12. Указание столбцов для конечного набора данных
Рисунок 12. Указание столбцов для конечного набора данных
  1. Укажите столбцы, включаемые в генерируемое предложение GROUP BY, как показано на рисунке 13.
Рисунок 13. Указание столбцов, включаемых в предложение Group By
Рисунок 13. Указание столбцов, включаемых в предложение Group By

Шаг 7. Добавление оператора Table Join

На данном этапе мы готовы объединить данные, производимые оператором Group By, с данными, производимыми первоначальным оператором XML Relational Mapping. После этого мы будем иметь один конечный набор данных, который может заполнить целевую таблицу DWADMIN.ACCT.

  1. Выберите в палитре SQL Warehousing Operators > Transformations > Table Join.
  2. Перетащите его правее оператора Group By.
  3. Соедините первый оператор XML Relational Mapping с Table Join.
  4. Соедините оператор Group By с Table Join.
  5. Дважды щелкните левой кнопкой мыши на операторе Table Join для его программирования.
  6. Создайте выражение, выполняющее внутреннее объединение по эквивалентности (inner equi-join) столбцов ID в двух конечных наборах данных, нажав кнопку ... или указав его вручную. Например, условие Join может выглядеть следующим образом: "IN_045_0"."id" = "IN1_045_1"."id" (как показано на рисунке 14).
Рисунок 14. Создание выражения join
Рисунок 14. Создание выражения join
  1. При желании можно использовать Design Studio для графического построения выражения join, как показано на рисунке 15.
Рисунок 15. Графическое построение выражения join
Рисунок 15. Графическое построение выражения join
  1. Идентифицируйте столбцы, включаемые в конечный набор данных, как показано на рисунке 16. Эти столбцы должны соответствовать столбцам целевой таблицы DWADMIN.ACCT.
Рисунок 16. Выбор столбцов, включаемых в конечный набор данных оператора
Рисунок 16. Выбор столбцов, включаемых в конечный набор данных оператора

Шаг 8. Добавление оператора Target Table для ACCT

Теперь все готово для определения операторов, заполняющих две целевые таблицы хранилища данных. Для заполнения таблицы DWADMIN.ACCT выполните следующие действия:

  1. Выберите в палитре SQL Warehousing Operators > Target Table.
  2. Перетащите его правее оператора Table Join.
  3. При запросе укажите DWADMIN.ACCT как таблицу Target Database Table (см. рисунок 17).
Рисунок 17. Указание DWADMIN.ACCT как целевой таблицы
Рисунок 17. Указание DWADMIN.ACCT как целевой таблицы
  1. Соедините порт оператора Table Join под названием Inner (для inner join) с оператором Target Table.
  2. Дважды щелкните левой кнопкой мыши на операторе Target Table для его программирования.
  3. Укажите, что мы хотим очистить целевую таблицу перед выполнением операций вставки, выбрав Delete all rows, как показано на рисунке 18. Это позволяет легко тестировать поток данных несколько раз.
Рисунок 18. Удаление всех строк перед вставкой
Рисунок 18. Удаление всех строк перед вставкой
  1. Отобразите исходные столбцы из конечного набора оператора Table Join на целевые столбцы таблицы, перетаскивая исходные столбцы (слева) в область Map From конечных столбцов справа, как показано на рисунке 19.
Рисунок 19. Идентификация исходных данных для каждого столбца целевой таблицы ACCT
Рисунок 19. Идентификация исходных данных для каждого столбца целевой таблицы ACCT

Шаг 9. Добавление оператора Target Table для HOLDINGS

Теперь определите оператор Target Table для заполнения таблицы DWADMIN.HOLDINGStable, выполнив следующие действия:

  1. Выберите в палитре SQL Warehousing Operators > Target Table.
  2. Перетащите его правее нижнего оператора XML Relational Mapping. Это оператор служит также входом для оператора Group By.
  3. При запросе укажите DWADMIN.HOLDINGS как таблицу Target database table (см. рисунок 20).
Рисунок 20. Идентификация DWADMIN.HOLDINGS как целевой таблицы
Рисунок 20. Идентификация DWADMIN.HOLDINGS как целевой таблицы
  1. Соедините оператор XML Relational Mapping с оператором Target Table для DWADMIN.HOLDINGS.
  2. Дважды щелкните левой кнопкой мыши на операторе Target Table для его программирования.
  3. Укажите, что хотите очистить целевую таблицу перед выполнением операций вставки, выбрав Delete all rows, как показано на рисунке 21. Это позволит легко тестировать поток данных несколько раз.
Рисунок 21. Удаление всех строк перед вставкой
Рисунок 21. Удаление всех строк перед вставкой
  1. Отобразите соответствующие исходные столбцы из оператора XML Relational Mapping на целевые столбцы таблицы, как показано на рисунке 22. В эту целевую таблицу можно вставить подмножество доступных столбцов.
Рисунок 22. Отображение доступных исходных столбцов на столбцы таблицы HOLDINGS
Рисунок 22. Отображение доступных исходных столбцов на столбцы таблицы HOLDINGS

Шаг 10. Тестирование проделанной работы

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

  1. Сохраните проделанную работу, если еще не сделали этого.
  2. В панели Data Project Explorer щелкните правой кнопкой мыши на потоке данных и выберите Validate.
  3. При обнаружении каких-либо ошибок исправьте их.
  4. При желании установите точки прерывания в потоке данных, выполнив щелчок правой кнопкой мыши на соединении между операторами и выбрав Toggle Breakpoint. На рисунке 23 показано, как выглядит поток данных после установки точек прерывания.
Рисунок 23. Поток данных с точками прерывания, установленными для отладки
Рисунок 23. Поток данных с точками прерывания, установленными для отладки
  1. В панели Data Project Explorer щелкните правой кнопкой мыши на потоке данных и выберите Debug или Execute. При отладке потока можно следить за выходными данными на каждом шаге, используя пиктограмму Resume. Отметим, что отладчик может генерировать предупреждения, касающиеся выражений DROP TABLE, которые можно проигнорировать.
  2. Если нужно, проверьте генерируемые выражения при отладке или выполнении потока данных. Появляющееся окно содержит выражения DB2 SQL и SQL/XML, ассоциированные с потоком. В листинге 4 приведен фрагмент сгенерированного кода для данного примера потока данных.
Листинг 4. Результаты выполнения потока данных, включающие сгенерированный код
Execution Result:
INFO: SQW10102I: Execution succeeded.


------------------------------------------------------
Execution Log:
C:/DWE/workspace/TPoXDW/run-profiles/logs/XMLTableACCTHoldingsGroupBy_SQW00...

 Data-Flows  Jan 25, 2010 1:09:49 PM  SQW03415I: Flow execution started for SQW00...
 Data-Flows  Jan 25, 2010 1:09:49 PM  SQW38501I: Execution log file:  C/DWE/works...
 Data-Flows  Jan 25, 2010 1:09:49 PM  SQW38509I: Execution temporary work directory...
 Data-Flows  Jan 25, 2010 1:09:52 PM  SQW03275I: Execution of SQL statement "SET...
 Data-Flows  Jan 25, 2010 1:09:52 PM  SQW03275I: Execution of SQL statement "CREATE...
  INFO
) AS
WITH
  Q22 (INFO) AS
    (SELECT INFO AS INFO

Заключение

В этой серии статей рассказывается, как можно совместно использовать IBM InfoSphere Warehouse Design Studio и DB2 pureXML для поддержки растущего применения XML в хранилищах данных. Формат XML становится предпочтительным форматом обмена данными во многих организациях. Поэтому проектировщики баз данных анализируют возможности интеграции XML в свои хранилища данных. Разработка ETL-заданий (потоков данных) является важным аспектом интеграции XML в системы хранения данных.

В данной статье, первой в серии из двух статей, демонстрируется, как создать единый поток данных для заполнения двух целевых таблиц в хранилище данных из одной основанной на XML исходной таблицы. Одна из целевых таблиц содержит только реляционные данные, а вторая - как реляционные, так и XML-данные. Во второй статье серии будет показано, как реализовать аналогичный сценарий, используя поток управления, который задает последовательность выполнения двух различных потоков данных, работающих с общей исходной таблицей, основанной на XML. Подобное управление ETL-заданием может быть полезно для гарантирования нужной последовательности загрузки таблиц хранилища данных, содержащих зависимости первичных или внешних ключей.

Благодарности

Автор выражает признательность Маттиасу Никола (Matthias Nicola), Цзин Шеню (Jing Shan), Линь Цзу (Lin Xu) и Шуминь Ву (Shumin Wu) за рецензирование данной серии статей.


Загрузка

ОписаниеИмяРазмер
Пример DB2 сценария и данных (для Windows)dwsetup.zip100 КБ

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management, XML
ArticleID=852604
ArticleTitle=Использование IBM InfoSphere Warehouse Design Studio с pureXML-данными: Часть 1. Создание потока ETL-данных для заполнения хранилища гибридных данных
publish-date=12182012