Usando o IBM InfoSphere Warehouse Design Studio com dados pureXML, Parte 1: Criar um fluxo de dados ETL para preencher um armazém de dados híbrido

Aprenda a integrar dados XML críticos para os negócios ao seu armazém de dados usando o IBM® InfoSphere™ Warehouse Design Studio e o DB2® 9.7 pureXML®. Esta série de artigos em duas partes fornece instruções passo a passo para usar o pureXML como fonte de dados tanto de origem como de destino para operações de extração, transformação e carregamento (ETL) desenvolvidas com o InfoSphere Warehouse Design Studio. Este artigo explica como construir um fluxo de dados único que usa uma tabela de origem baseada em XML para preencher duas tabelas no armazém de dados de destino. Uma dessas tabelas contém apenas dados relacionais, enquanto a outra contém dados tanto relacionais como XML.

Introdução

O aumento da utilização de XML na captura e intercâmbio de dados críticos para os negócios vem levando as empresas a avaliar como integrar dados XML aos seus ambientes de armazém de dados. Este artigo descreve como as empresas podem usar o IBM InfoSphere Warehouse Design Studio para criar graficamente fluxos de dados que extraem, transformam e carregam dados XML gerenciados pelo DB2. Você aprenderá a extrair dados pureXML do DB2 9.7, transformar o XML conforme necessário e preencher um armazém de dados relacionais/XML híbrido.

Para que este artigo lhe seja útil, é recomendável ter alguns conhecimentos de armazém de dados, tecnologia ETL (extract-transform-load) e XML. Se você não está familiarizado com o DB2 pureXML ou o IBM InfoSphere Warehouse Design Studio, introduções resumidas são fornecidas nas seções a seguir e outras referências podem ser encontradas nos Recursos deste artigo.

Introdução ao DB2 pureXML

O DB2 fornece às empresas uma interface comum de programação de aplicativos e plataforma de gerenciamento de banco de dados para dados modelados em tabelas e em hierarquias XML. A arquitetura de gerenciamento de banco de dados híbrida permite que as empresas integrem mensagens e documentos XML a seus ambientes de banco de dados sem fragmentar (ou decompor) o XML em colunas de diferentes tabelas. Com o DB2, os desenvolvedores de aplicativos podem recuperar porções relevantes dos dados XML com rapidez e eficiência e podem integrar dados XML e relacionais com esforço mínimo. A Figura 1 ilustra a arquitetura de banco de dados híbrido do DB2.

Figura 1. A arquitetura de banco de dados híbrido do DB2 suporta dados relacionais e XML
A arquitetura de banco de dados híbrido do DB2 suporta dados relacionais e XML

Para usar o DB2 pureXML, os administradores criam uma tabela com uma ou mais colunas do tipo XML. Quando os dados XML são inseridos nessa coluna, o DB2 automaticamente preserva sua estrutura inerente e fornece acesso otimizado aos dados XML conforme necessário. A indexação, compressão e outros recursos do DB2 para XML proporcionam um sólido desempenho e eficiência em tempo de execução.

Os dados pureXML do DB2 vêm ganhando espaço como parte dos ambientes de armazém de dados. Os aplicativos baseados em mensagens, arquiteturas orientadas a serviço (SOA), aplicativos centrados na Web e projetos de integração de aplicativos frequentemente usam XML para definir como os dados importantes para os negócios serão representados e intercambiados.

À medida que mais e mais dados críticos para os negócios são capturados em XML, não é surpreendente que as empresas queiram gerenciar, compartilhar, consultar e gerar relatórios sobre dados XML. Algumas empresas estão criando áreas temporárias nos armazéns de dados que usam pureXML como mecanismo de armazenamento subjacente. Algumas empresas estão estendendo as tabelas relacionais em seus armazéns de dados com uma ou mais colunas pureXML para acomodar novos requisitos comerciais.

Introdução ao InfoSphere Warehouse Design Studio

O InfoSphere Warehouse Design Studio (Design Studio) fornece aos arquitetos e desenvolvedores de armazéns de dados serviços de modelagem, geração de consultas, mineração de dados e ETL por meio de uma interface baseada em Eclipse. Usando ferramentas gráficas, os designers podem executar várias funções, que incluem a conexão a bancos de dados de origem e de destino, a engenharia reversa de modelos de dados físicos e a construção de trabalhos ETL do DB2 (fluxos de dados). Este artigo concentra-se no uso do Design Studio para construir um fluxo de dados ETL.

O Design Studio inclui vários tipos de operadores SQL de warehousing e operadores XML para manipular dados relacionais e pureXML. Esses operadores incluem os seguintes:

  • Leitura de tabelas ou arquivos de origem
  • Gravação de dados em tabelas ou arquivos de destino
  • Execução de funções de consulta, como junções, uniões, agregações

Os operadores XML são novos no DB2 V9.7 e incluem:

Operador XML Relational Mapping
Fragmenta dados XML para as colunas relacionais de um conjunto de resultados.
Operador XML Composer
Cria dados XML a partir de dados relacionais ou XML.
Operador XQuery
Executa XQueries para recuperar dados XML específicos. O código gerado usa a função SQL XMLQuery() para invocar a XQuery.
Dois operadores XML Node
Renomeia um nó XML, como um elemento ou um atributo, e extrai um ou mais nós de um documento XML
Dois operadores de arquivo XML
Lê ou grava em arquivos XML

O fluxo de dados de exemplo discutido neste artigo usa o operador XML Relational Mapping e vários operadores Data Warehousing para preencher uma tabela relacional de destino e uma tabela relacional/XML híbrida a partir de uma única tabela XML de origem.

Configurando os ambientes de desenvolvimento e tempo de execução

Para criar os cenários de exemplo descritos neste artigo, instale o DB2 9.7 Enterprise Server Edition e o IBM InfoSphere Warehouse Design Studio 9.7. Ambos podem ser instalados em um único sistema Windows®. Além disso, baixe os dados de exemplo e o script de configuração incluídos com este artigo.

Os dados operacionais de exemplo incluem informações sobre contas de clientes e seus investimentos financeiros. Os dados são baseados em um subconjunto do da referência de software livre Transaction Processing over XML (TPoX). Você aprenderá mais sobre os dados operacionais e a estrutura do armazém de dados a seguir. Para obter mais informações sobre TPoX, consulte os Recursos.


Introduzindo o cenário

O cenário descrito neste artigo usa dados operacionais armazenados em DB2 pureXML como entrada para o trabalho de extração, transformação e carregamento (ETL) que você desenhará para preencher um armazém de dados baseado em DB2. Você usará o Design Studio para extrair dados armazenados em uma coluna XML do DB2 e mapear esses dados a duas tabelas em um armazém de dados DB2, como é mostrado na Figura 2. Uma dessas tabelas contém apenas colunas relacionais tradicionais, enquanto a segunda contém colunas relacionais e uma coluna XML.

Figura 2. O cenário de exemplo exige que os dados operacionais armazenados em DB2 pureXML sirvam como entrada para um armazém de dados DB2
O cenário de exemplo exige que os dados operacionais armazenados em DB2 pureXML sirvam como entrada para um armazém de dados DB2

Esse modelo de dados representa um cenário comum em que partes dos dados XML frequentemente são fragmentadas para uma estrutura relacional. Essas partes representam dados que os usuários comerciais podem analisar e consultar frequentemente. Como muitas ferramentas de inteligência de negócios são otimizadas para suportar estruturas relacionais, a fragmentação de dados XML frequentemente consultados em colunas relacionais pode ser bastante eficaz. Entretanto, as necessidades comerciais podem variar ao longo do tempo, dificultando a determinação, pelos administradores, dos valores XML que devem ser fragmentados em colunas relacionais. A manutenção dos dados XML completos no armazém de dados permite que os usuários acessem imediatamente dados importantes para os negócios que não foram fragmentados anteriormente em um formato relacional.

Para simplificar os cenários de exemplo neste artigo, você usará um único banco de dados DB2 para armazenar os dados operacionais e os dados do armazém. Evidentemente, em um ambiente de produção, os dados operacionais e dados do armazém seriam gerenciados em bancos de dados separados, geralmente em servidores separados. Entretanto, o uso de um único banco de dados de teste permite que você se concentre em como o Design Studio pode manipular dados pureXML.

Tabelas de origem e de destino

O cenário de exemplo armazena dados XML operacionais na tabela TPOXADMIN.ACCOUNT, que serve como tabela de origem para o fluxo de dados ETL. A tabela ACCOUNT contém uma única coluna XML (INFO). Os assistentes de modelagem de dados do Design Studio podem ser usados para criar essa tabela (assim como as tabelas de destino no armazém de dados). Entretanto, o cenário de exemplo simplesmente inclui as instruções DDL do DB2 para todas as tabelas necessárias.

A Listagem 1 mostra como criar a tabela TPOXADMIN.ACCOUNT.

Listagem 1. SQL para criar a tabela ACCOUNT de origem
 create table tpoxadmin.account(info xml)

A coluna INFO contém detalhes sobre a conta, inclusive seu título, data de abertura, saldo disponível, conteúdo da carteira de investimentos e outras informações. (Na referência TPoX, documentos de conta como esses são inseridos em documentos mais amplos de conta de cliente.) A Figura 3 mostra uma parte de um documento XML armazenado na tabela ACCOUNT mencionada neste artigo.

Figura 3. Parte de um registro XML armazenado na tabela TPOXADMIN.ACCOUNT
Parte de um registro XML armazenado na tabela TPOXADMIN.ACCOUNT

Para simplificar os testes, o banco de dados do armazém de dados de destino também é configurado como TPoX. As informações de origem da coluna INFO em TPOXADMIN.ACCOUNT serão mapeadas para duas tabelas: a tabela DWADMIN.ACCT, que contém informações gerais sobre a conta, e a tabela DWADMIN.HOLDINGS, que contém informações sobre diferentes investimentos (conteúdo da carteira de investimentos) de uma determinada conta. A Listagem 2 mostra como definir essas tabelas.

Listagem 2. Definições de tabelas do armazém de dados de destino
-- DWADMIN.ACCT contains general information about accounts. 
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 tracks specific investments (holdings) for a given account 
create table dwadmin.holdings (
     id                 int,    
     symbol             varchar(10), 
     type               varchar(25), 
     quantity           decimal(12,3) 
)

Para compreender como os dados XML de origem na coluna INFO de TPOXADMIN.ACCOUNT é mapeada às diferentes colunas das tabelas do armazém de dados, consulte a Tabela 1 e a Tabela 2. Observe que a estrutura da tabela DWADMIN.ACCT de destino exige mais do que simplesmente recuperar valores de dados XML específicos dos documentos de origem. Em particular, as colunas DATECHANGED e TIMECHANGED exigem uma transformação simples dos valores de dados, enquanto as colunas TOTALHOLDINGS e DISTINCTHOLDINGS exigem agregação de certos dados.

Tabela 1. Dados XML de origem para as colunas da tabela de destino DWADMIN.ACCT
Nome da coluna em DWADMIN.ACCTExpressão XPath ou fonte de dados
ID/Account/@id
TITLE/Account/AccountTitle
CURRENCY/Account/Currency
BALANCE/Account/Balance/WorkingBalance
OFFICER/Account/AccountOfficer
DATECHANGEDExtraído de /Account/LastUpdate
TIMECHANGEDExtraído de /Account/LastUpdate
TOTALHOLDINGSCalculado. (Contagem de /Account/Position/Type)
HOLDINGTYPESCalculado. (Contagem distinta de /Account/Position/Type)
FULLRECORDTodo o documento XML (/Account)

A Tabela 2 mostra os dados XML de origem para as colunas da tabela de destino DWADMIN.HOLDINGS.

Tabela 2. Dados XML de origem para as colunas da tabela de destino DWADMIN.HOLDINGS
Nome da coluna em DWADMIN.HOLDINGSExpressão XPath ou fonte de dados
ID/Account/@id
SYMBOL/Account/Holdings/Position/Symbol
TYPE/Account/Holdings/Position/Type

Design do fluxo de dados

Como seria de se esperar, existem várias maneiras de programar um trabalho ETL para este cenário. Neste artigo, você aprenderá a definir um fluxo de dados único para executar todo o trabalho necessário. Na segunda parte desta série, você implementará o mesmo cenário usando vários fluxos de dados e um único fluxo de controle para gerenciar a sequência de execução. Essa técnica é útil para operações complexas e ajuda a promover a reutilização de código.

O fluxo de dados único que você construirá neste artigo usa vários operadores do Design Studio, inclusive operadores Table Source e Table Target, operadores XML Relational Mapping, um operador Group By e um operador Table Join. A Figura 4 mostra a estrutura geral, que é discutida mais detalhadamente a seguir.

Figura 4. Fluxo de dados para o cenário ETL
Fluxo de dados para o cenário ETL

O operador Table Source (mostrado no canto superior esquerdo da Figura 4) identifica a tabela TPOXADMIN.ACCOUNT como a fonte de entrada. Os dados XML dessa tabela alimentam dois operadores XML Relational Mapping. Um desses operadores (mostrado na ramificação inferior na Figura 4) alimenta um operador Group By, que executa a agregação mostrada na Tabela 1. Entretanto, uma das tabelas de destino (DWADMIN.ACCT) também exige que o registro XML completo seja mantido para fins de conformidade. Como colunas XML não podem participar de cláusulas Group By, é necessário um segundo operador XML Relational Mapping (mostrado na ramificação superior da Figura 4). Esse operador extrairá o valor do ID da conta dos dados XML e preservará o registro XML completo. O ID da conta obtido nessa operação de mapeamento poderá então ser unido ao ID da conta incluído na saída da operação Group By, criando um conjunto de resultados que preencherá a tabela ACCT de destino.

Preencher a tabela DWADMIN.HOLDINGS de destino é mais simples. A saída de um dos operadores XML Relational Mapping (mostrada na ramificação inferior da Figura 4) pode alimentar a tabela de destino diretamente.


Etapa 1: Preparando o ambiente do banco de dados DB2

A seção Downloads deste artigo contém um script DB2 que cria a tabela operacional (de origem) e as tabelas do armazém de dados (de destino) necessárias. Ele também preenche a tabela operacional com informações de conta XML de exemplo. Baixe o arquivo DWsetup.db2, abra uma janela de comando DB2 e emita o comando mostrado na Listagem 3.

Listagem 3. Invocando o script DB2
 db2 -td@ -vf DWsetup.db2

Lembre-se que esse script foi elaborado para suportar um servidor DB2 9.7 sendo executado no Windows.


Etapa 2: Preparando o ambiente do Design Studio

Antes de criar o fluxo de dados, prepare o ambiente do Design Studio. As etapas a seguir descrevem como seguir processos padrão do Design Studio para estabelecer uma conexão com o banco de dados TPoX, criar um projeto de Armazém de Dados, criar um modelo físico dos dados do banco de dados TPoX por meio de recursos de engenharia reversa e criar um novo fluxo de dados para o seu trabalho.

  1. No Data Source Explorer, realce o banco de dados TPoX e clique com o botão direito do mouse para conectar-se a ele.
  2. Insira as informações apropriadas, inclusive seu nome de usuário e senha, como é mostrado na Figura 5.
Figura 5. Estabelecendo uma conexão com o banco de dados TPoX
Estabelecendo uma conexão com o banco de dados TPoX
  1. Teste a conexão para verificar se é possível conectar ao banco de dados.
  2. No painel Data Project Explorer, clique com o botão direito do mouse para criar um novo projeto de armazém de dados com o nome de sua escolha.
  3. Realce o projeto que você acabou de criar e navegue até a pasta Data Flows.
  4. Clique com o botão direito do mouse para criar um novo fluxo de dados com o nome de sua escolha.
  5. Para este cenário, especifique que você deseja trabalhar contra um banco de dados on-line e selecione a conexão ao banco de dados TPoX quando solicitado. Ignore qualquer erro que possa aparecer, porque o fluxo de dados está vazio.
  6. Dentro do projeto, navegue até a pasta Data Models.
  7. Clique com o botão direito do mouse para criar um novo modelo de dados físico.
  8. Especifique que deseja criar o modelo por engenharia reversa de um banco de dados DB2 9.7.
  9. Identifique a conexão ao banco de dados TPoX quando solicitado e selecione TPOXADMIN e DWADMIN como os esquemas de destino.

Etapa 3: Adicionando a tabela de origem ao fluxo de dados

Conclua as etapas a seguir para programar o fluxo para ler dados de origem da tabela TPOXADMIN.ACCOUNT.

  1. Na Paleta, selecione Operadores SQL de Warehousing > Fontes e Tabelas > Fonte de Tabela.
  2. Arraste-a para o lado esquerdo do fluxo de dados vazio. Um assistente aparecerá.
  3. Selecione TPOXADMIN.ACCOUNT como a tabela de banco de dados de origem, como é mostrado na Figura 6.
Figura 6. Identifique TPOXADMIN.ACCOUNT como a tabela de origem
Identifique TPOXADMIN.ACCOUNT como a tabela de origem
  1. Verifique se o conjunto de resultados inclui a coluna INFO (a coluna XML) na saída.
  2. Salve seu trabalho.

Etapa 4: Adicionando um operador XML Relational Mapping

Conclua as etapas a seguir para adicionar um operador XML Relational Mapping, conectando-o à saída da tabela de origem. Programe esse operador para extrair o ID da conta de cada documento XML e para incluir o conteúdo completo de cada documento XML no conjunto de resultados. A tabela DWADMIN.ACCT de destino do exemplo inclui várias colunas relacionais, bem como os registros XML originais. Esse operador extrai valores de ID da conta para alimentar uma operação de junção que pode produzir o conjunto de resultados desejado.

  1. Na Paleta, selecione Operadores XML > XML Relational Mapping.
  2. Arraste-o para a direita do ícone Fonte de Tabela.
  3. Conecte a tabela de origem ao operador XML Relational Mapping.
  4. Clique duas vezes no operador XML Relational Mapping para programá-lo.
  5. Identifique a coluna INFO como a coluna XML.
  6. Especifique um espaço de nomes padrão para documentos XML de entrada. Como a Figura 3 mostra, todos os registros de conta têm um espaço de nomes XML.
  7. Clique no ícone + amarelo para adicionar uma linha à caixa Namespaces e insira http://tpox-benchmark.com/custacc como a URI.
  8. Deixe o campo Prefix em branco para usá-lo como espaço de nomes padrão, como é mostrado na Figura 7.
Figura 7. Defina o espaço de nomes padrão para expressões XPath
Defina o espaço de nomes padrão para expressões XPath
  1. Conclua as etapas a seguir para especificar a expressão XQuery e definição de coluna que alimentarão a função XMLTable() subjacente. O operador XML Relational Mapping gera uma consulta DB2 que inclui uma chamada de função XMLTable().
    1. Especifique /Account/@id como a expressão XQuery.
    2. Defina o conjunto de resultados de saída para incluir uma coluna ID do tipo integer derivada do nó especificado na expressão XQuery. O campo Path deve ser definido como . (um ponto). Isso faz o DB2 transformar as informações de ID da conta localizadas em /Account/@id em valores inteiros.
    3. Verifique se sua especificação mostra Expressão XQuery como /Account/@id e Definição de coluna com id como o Nome da Coluna e INTEGER como o Tipo de Dados, como é mostrado na Figura 8.
Figura 8. Extraia as informações de ID da conta, convertendo a saída para um valor inteiro
Extraia as informações de ID da conta, convertendo a saída para um valor inteiro
  1. Verifique se a saída desse operador de fluxo de dados inclui a coluna ID, bem como a coluna de entrada XML original. O conjunto de resultados final no exemplo mostra duas colunas: fullrecord (XML) e id (inteiro), como é mostrado na Figura 9.
Figura 9. Defina o conjunto de resultados final com duas colunas
Defina o conjunto de resultados final com duas colunas

Etapa 5: Adicionando um segundo operador XML Relational Mapping

O fluxo de dados de exemplo precisa de dois operadores XML Relational Mapping. O segundo operador extrai diversos valores de coluna relacional de vários nós XML. Esse operador também extrai as informações de data e hora de um registro de data e hora, preenchendo duas colunas relacionais a partir de um valor de dados XML. Finalmente, esse operador extrai um valor relacional que alimenta duas operações de agregação calculadas em uma operação Group By subsequente.

Como o primeiro operador XML Relational Mapping que você definiu, esse operador usa a coluna INFO da tabela TPOXADMIN.ACCOUNT como fonte de entrada.

Conclua as etapas a seguir para adicionar o segundo operador XML Relational Mapping:

  1. Na Paleta, selecione Operadores XML > XML Relational Mapping.
  2. Arraste-o para abaixo do operador XML Relational Mapping que já está incluído no fluxo.
  3. Conecte a tabela de origem a esse novo operador XML Relational Mapping.
  4. Clique duas vezes no novo operador XML Relational Mapping para programá-lo.
  5. Identifique a coluna INFO como a coluna XML.
  6. Especifique o espaço de nomes padrão http://tpox-benchmark.com/custacc.
  7. Especifique a expressão XQuery e definição de coluna que alimentarão a função XMLTable() subjacente. Como cada conta pode ter vários investimentos, conclua as etapas a seguir para especificar uma expressão XQuery que gerará uma linha para cada investimento em cada conta.
    1. Especifique /Account/Holdings/Position/Type como a expressão XQuery geradora de linhas.
    2. Defina o conjunto de resultados de saída para incluir as colunas relacionais que corresponderão às das tabelas DWADMIN.ACCT e DWADMIN.HOLDINGS de destino, com a exceção das duas colunas calculadas (DISTINCTHOLDINGS e TOTALHOLDINGS). A Tabela 3 mostra as colunas necessárias e seus respectivos tipos de dados e expressões de caminho.
Tabela 3. Tabela de definição de colunas para /Account/Holdings/Position/Type
Nome da ColunaTipo de DadosComprimentoEscalaCaminho
idINTEIRO../../../@id
titleVARCHAR50../../../AccountTitle
currencyCHAR3../../../currency
workingbalanceINTEIRO../../../Balance/WorkingBalance@id
officerVARCHAR50../../../AccountOfficer
datechangedREGISTRO DE DATA E HORA../../../LastUpdate
timechangedREGISTRO DE DATA E HORA../../../LastUpdate
holdingtypeVARCHAR25.
symbolVARCHAR30../Symbol
qtyDECIMAL123../Quantity
  1. Especifique a saída desse operador de fluxo de dados mapeando todas as colunas disponíveis, exceto a coluna INFO, às colunas de resultado correspondentes, como é mostrado na Figura 10.
Figura 10. Defina o conjunto de resultados a ser gerado por esse operador
Defina o conjunto de resultados a ser gerado por esse operador
  1. Altere a definição das colunas DATECHANGED e TIMECHANGED no conjunto de resultados de modo que seus valores sejam derivados de expressões SQL apropriadas envolvendo operações DATE/TIME. É possível especificar essas expressões clicando duas vezes em cada linha, o que faz surgir outra janela com uma área para construir ou digitar expressões SQL. Use DATE(table.column) para a coluna DATECHANGED e TIME(table.column) para a coluna TIMECHANGED no conjunto de resultados. A expressão date("XMLTABLE_08"."datechanged") define a coluna de resultado DATECHANGED, como é mostrado na Figura 11.
Figura 11. Especifique a expressão DATE/TIME apropriada no painel de texto SQL
Especifique a expressão DATE/TIME apropriada no painel de texto SQL

Etapa 6: Adicionando um operador Group By

Com todos os valores relacionais necessários extraídos da coluna XML de origem, chegou a hora de agregar os dois valores necessários para uma das tabelas do armazém de dados de destino (a tabela DWADMIN.ACCT). Essa tabela controla o número de investimentos contidos em cada conta e o número de tipos distintos de conteúdo em cada conta. Por exemplo, uma conta que investiu em quatro fundos acionários e três fundos de renda fixa teria um total de sete investimentos e dois tipos distintos de investimento. O operador Group By permite gerar um conjunto de resultados que inclui as operações de agregação exigidas. Conclua as etapas a seguir para criar e programar o operador Group By.

  1. Na Paleta, selecione SQL Warehousing Operators > Transformations > Group By.
  2. Arraste-o para a direita do segundo operador XML Relational Mapping.
  3. Conecte o operador XML Relational Mapping ao operador Group By.
  4. Clique duas vezes no operador Group By para programá-lo.
  5. Especifique as colunas a serem incluídas no conjunto de resultados desse operador concluindo as seguintes etapas:
    1. Remova a coluna INFO (a coluna XML) da Lista de Seleção mostrada no conjunto de resultados. Colunas XML não podem ser incluídas em instruções SQL Group By. Em uma operação de fluxo de dados subsequente, você usará um operador de junção para garantir a inserção dos registros de conta XML completos (contidos na coluna INFO) na tabela do armazém de dados de destino.
    2. Remova as colunas HOLDINGTYPE, SYMBOL e QTY do conjunto de resultados. Essas colunas não são necessárias para a tabela de destino DWADMIN.ACCT.
    3. Altere a expressão de entrada da coluna TOTALHOLDINGS para executar uma contagem de valores HOLDINGTYPE. Sua expressão deverá ser semelhante a COUNT("INPUT_023_0"."holdingtype").
    4. Altere a expressão de entrada da coluna DISTINCTHOLDINGS para executar uma contagem distinta de valores HOLDINGTYPE. Sua expressão deverá ser semelhante a COUNT(distinct "INPUT_023_0"."holdingtype").

    A Figura 12 mostra como configurar o operador Group By. Observe que as colunas TOTALHOLDINGS e DISTINCTHOLDINGS são calculadas usando expressões COUNT().

Figura 12. Especifique colunas para o conjunto de resultados
Especifique colunas para o conjunto de resultados
  1. Especifique as colunas a serem incluídas na cláusula GROUP BY gerada, como é mostrado na Figura 13.
Figura 13. Especifique as colunas a serem incluídas na cláusula Group By
Especifique as colunas a serem incluídas na cláusula Group By

Etapa 7: Adicionando um operador Table Join

Neste ponto, você está pronto para unir os dados produzidos pelo operador Group By aos dados produzidos pelo operador XML Relational Mapping inicial. Depois de fazer isso, você terá um único conjunto de resultados que pode preencher a tabela DWADMIN.ACCT de destino.

  1. Na Paleta, selecione SQL Warehousing Operators > Transformations > Table Join.
  2. Arraste-o para a direita do operador Group By.
  3. Conecte o primeiro operador XML Relational Mapping ao Table Join.
  4. Conecte o operador Group By ao Table Join.
  5. Clique duas vezes no operador Table Join para programá-lo.
  6. Crie uma expressão que execute uma junção equivalente interna nas colunas ID dos dois conjuntos de resultados clicando no botão ou especificando-a manualmente. Por exemplo, uma condição Join pode ser "IN_045_0"."id" = "IN1_045_1"."id", como é mostrado na Figura 14.
Figura 14. Construa a expressão de junção
Construa a expressão de junção
  1. Opcionalmente, o Design Studio pode ser usado para construir graficamente a expressão de junção, como é mostrado na Figura 15.
Figura 15. Construção gráfica da junção
Construção gráfica da junção
  1. Identifique as colunas a serem incluídas no conjunto de resultados, como é mostrado na Figura 16. Essas colunas deverão corresponder às da tabela DWADMIN.ACCT de destino.
Figura 16. Selecione as colunas a serem incluídas no conjunto de resultados do operador
Selecione as colunas a serem incluídas no conjunto de resultados do operador

Etapa 8: Adicionando um operador Target Table para ACCT

Você está pronto para definir operadores para preencher as duas tabelas do armazém de dados de destino. Conclua as etapas a seguir para preencher a tabela DWADMIN.ACCT.

  1. Na Paleta, selecione Operadores SQL de Warehousing > Target Table.
  2. Arraste-o para a direita do operador Table Join
  3. Quando solicitado, especifique DWADMIN.ACCT como a Tabela do Banco de Dados de Destino, como é mostrado na Figura 17.
Figura 17. Identifique DWADMIN.ACCT como a tabela de destino
Identifique DWADMIN.ACCT como a tabela de destino
  1. Conecte a porta do operador Table Join rotulada como Inner (para junção interna) ao operador Target Table.
  2. Clique duas vezes no operador Target Table para programá-lo.
  3. Especifique que deseja limpar a tabela de destino antes de executar operações de inserção selecionando Excluir todas as linhas, como é mostrado na Figura 18. Isso lhe permitirá testar facilmente o fluxo de dados várias vezes.
Figura 18. Exclua todas as linhas antes da inserção
Exclua todas as linhas antes da inserção
  1. Mapeie as colunas de origem do conjunto de resultados do operador Table Join às colunas de destino da tabela arrastando e soltando colunas de origem (à esquerda) na área Map From da definição de colunas de resultado à direita, como é mostrado na Figura 19.
Figura 19. Identifique os dados de origem para cada coluna na Tabela ACCT de destino
Identifique os dados de origem para cada coluna na Tabela ACCT de destino

Etapa 9: Adicionando um operador Target Table para HOLDINGS

Agora defina um operador Target Table para preencher a tabela DWADMIN.HOLDINGS concluindo as seguintes etapas:

  1. Na Paleta, selecione Operadores SQL de Warehousing > Target Table.
  2. Arraste-o para a direita do operador XML Relational Mapping inferior. Esse operador também serve como entrada para o operador Group By.
  3. Quando solicitado, especifique DWADMIN.HOLDINGS como a tabela do banco de dados de Destino, como é mostrado na Figura 20.
Figura 20. Identifique DWADMIN.HOLDINGS como a tabela de destino
Identifique DWADMIN.HOLDINGS como a tabela de destino
  1. Conecte o operador XML Relational Mapping ao operador Target Table para DWADMIN.HOLDINGS.
  2. Clique duas vezes no operador Target Table para programá-lo.
  3. Especifique que deseja limpar a tabela de destino antes de executar operações de inserção selecionando Excluir todas as linhas, como é mostrado na Figura 21. Isso lhe permitirá testar facilmente o fluxo de dados várias vezes.
Figura 21. Exclua todas as linhas antes da inserção
Exclua todas as linhas antes da inserção
  1. Mapeie as colunas de origem apropriadas do operador XML Relational Mapping às colunas de destino da tabela, como é mostrado na Figura 22. É possível inserir um subconjunto de colunas disponíveis nessa tabela de destino.
Figura 22. Mapeie a entrada disponível a colunas na tabela HOLDINGS
Mapeie a entrada disponível a colunas na tabela HOLDINGS

Etapa 10: Testando o seu trabalho

Agora você pode testar o seu fluxo de dados seguindo o processo padrão do Design Studio. Talvez seja útil usar o depurador no teste inicial, embora isso seja opcional.

  1. Se ainda não fez isso, salve o seu trabalho.
  2. No painel Data Project Explorer, clique com o botão direito do mouse no seu fluxo e selecione Validate.
  3. Se algum erro for detectado, corrija-o antes de prosseguir.
  4. Opcionalmente, defina pontos de interrupção em seus dados clicando com o botão direito do mouse em uma conexão entre operadores no fluxo de dados e clicando em Alternar Ponto de Interrupção. A Figura 23 mostra a aparência do fluxo de dados quando pontos de interrupção são definidos para a conexão.
Figura 23. Fluxo de dados com pontos de interrupção definidos para depuração
Fluxo de dados com pontos de interrupção definidos para depuração
  1. No painel Data Project Explorer, clique com o botão direito do mouse em seu fluxo e clique em Debug ou Execute. Se você depurar o fluxo, poderá monitorar a saída de cada etapa do fluxo de dados usando o ícone Resume. Observe que o depurador pode gerar avisos relacionados a instruções DROP TABLE, que podem ser ignorados.
  2. Se desejar, inspecione as instruções geradas ao depurar ou executar o fluxo. Será exibida uma janela contendo as instruções DB2 SQL e SQL/XML associadas ao fluxo. A Listagem 4 contém um resumo parcial do código gerado para esse fluxo de dados de exemplo.
Listagem 4. Resultados da execução do fluxo de dados, incluindo o código gerado
                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

Conclusão

Esta série explora como o IBM InfoSphere Warehouse Design Studio e o DB2 pureXML podem ser usados juntos para suportar o maior uso de XML em armazéns de dados. O XML emergiu como formato preferencial para intercâmbio de dados em muitas organizações. Consequentemente, os arquitetos de dados estão avaliando opções para integrar XML a seus armazéns de dados. Projetar trabalhos ETL (ou fluxos de dados) é um aspecto importante da integração de XML a ambientes de armazém de dados.

Este artigo, o primeiro em uma série em duas partes, mostrou como construir um único fluxo de dados que usa uma tabela de origem baseada em XML para preencher duas tabelas do armazém de dados de destino. Uma dessas tabelas contém apenas dados relacionais, enquanto a outra contém dados tanto relacionais como XML. O segundo artigo desta série explicará como implementar um cenário semelhante usando um fluxo de controle que sequencia a execução de dois fluxos de dados diferentes, ambos dependentes de uma tabela de origem comum baseada em XML. Esse método de controle do trabalho ETL pode ser útil para garantir a sequência correta no carregamento de tabelas do armazém de dados que contêm dependências de chave primária ou externa.

Agradecimentos

Obrigado a Matthias Nicola, Jing Shan, Lin Xu e Shumin Wu por revisarem esta série de artigos.


Download

DescriçãoNomeTamanho
Sample DB2 script and data (for Windows)dwsetup.zip100KB

Recursos

Aprender

Obter produtos e tecnologias

  • Agora é possível usar o DB2 gratuitamente. Faça o download do DB2 Express-C, uma versão sem custos do DB2 Express Edition para a comunidade, que oferece os mesmos recursos de dados centrais que o DB2 Express Edition e fornece uma base sólida para construir e implementar aplicativos.
  • Faça o download de uma versão de teste gratuita do InfoSphere Warehouse Enterprise Edition.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=483306
ArticleTitle=Usando o IBM InfoSphere Warehouse Design Studio com dados pureXML, Parte 1: Criar um fluxo de dados ETL para preencher um armazém de dados híbrido
publish-date=04162010