Ir para o conteúdo

Estruturas de Dados

Introdução

As estruturas de dados podem ser fornecidas como esquemas durante a configuração da atividade ou podem ser definidos dentro da transformação em si. Quando estruturas de dados são fornecidas em uma atividade, os esquemas são herdados pela transformação usando a atividade como origem ou destino na operação. Depois que os esquemas de origem e de destino de uma transformação forem definidos, você cria mapeamentos de transformação entre os esquemas de origem e de destino para definir como os dados devem ser processados.

Tipos de Estrutura de Dados

No Harmony, os esquemas de origem e de destino podem usar estruturas de dados que são consideradas planas ou hierárquico.

Estrutura Plana

Uma estrutura de dados plana consiste em um ou mais campos e registros únicos em uma estrutura bidimensional. Os exemplos incluem arquivos CSV, arquivos XML simples e tabelas de banco de dados únicas. Uma estrutura de dados simples também é chamada de estrutura de arquivo simples.

Example Flat Structure in XML Format
<customer>
    <id>10123</id>
    <name>ABC Co.</name>
    <street>1 Main St.</street>
    <city>Anytown</city>
    <state>NY</state>
    <zip>12345</zip>
</customer>

Estrutura Hierárquica

Uma estrutura de dados hierárquica possui um ou mais relacionamentos pai-filho ou aninhados entre campos e registros em uma estrutura complexa. Uma estrutura de dados hierárquica às vezes é chamada de estrutura relacional, multinível, complexa de dados_ ou árvore.

Example Hierarchical Structure in XML Format
<customer>
    <id>10123</id>
    <name>ABC Co.</name>
        <addresses>
            <address>
                <street>1 Main St.</street>
                <city>Anytown</city>
                <state>NY</state>
                <zip>12345</zip>
            </address>
            <address>
                <street>1 Time Square</street>
                <city>New York City</city>
                <state>NY</state>
                <zip>54321</zip>
            </address>
        </addresses>
</customer>

Exibição de Estruturas de Dados

As estruturas de dados são exibidas em formato de árvore que pode ser expandida e recolhida para mostrar a árvore inteira ou apenas uma parte dela.

Cada árvore consiste em nós e campos, onde os campos na estrutura de dados de origem podem ser mapeados para campos na estrutura de dados de destino.

Os nós têm um triângulo de divulgação à esquerda do nome do nó que é usado para recolher ou expandir o nó. Por padrão, os nós são expandidos em até 8 níveis de profundidade para esquemas com 750 nós ou menos e até 5 níveis de profundidade para esquemas com mais de 750 nós. Todos os nós abaixo de um nó de destino podem ser expandidos de uma só vez usando a opção de menu de ações do esquema Expandir todos os nós abaixo deste nó (consulte Nós de destino em Modo de mapeamento). Se você expandir ou recolher nós, o Cloud Studio lembrará o último estado de expansão que você estava usando na próxima vez que acessar a transformação.

Depois de expandidos, os nós exibem todos os nós e campos filhos contidos. Os nós podem ser considerados pastas com nós filhos como subpastas. Os campos estão contidos em nós e são listados com seus tipos de dados (boolean, integer, double, binary, string).

Por exemplo, na estrutura de destino mostrada abaixo, o nó json inclui o nó filho item, que contém os campos employeeId, name, e title. O nó item também contém o nó filho employeeDetails, que contém os campos salary, isWorking, e status.

estrutura de dados de destino

Exibição de Campos Mapeados

Um mapeamento de transformação consiste em campos ou nós de destino e seus scripts correspondentes. Esses scripts podem conter referências a campos ou nós de origem ou a componentes do projeto, usar funções ou conter outra lógica de script válida. Um mapeamento não inclui campos de destino que não estão mapeados.

Quando objetos e variáveis de origem são definidos no campo de destino, eles aparecem como blocos no campo de destino. O campo de destino mapeado é exibido com uma linha vertical roxa à esquerda do bloco do campo de destino:

objetos de origem do campo de destino

Quando um esquema de origem e um esquema de destino estão visíveis na tela e você está no modo de mapeamento, uma linha visual mostra a conexão com o objeto de origem. Passe o mouse sobre um campo de destino mapeado para mostrar uma linha cinza clara que conecta os objetos de origem usados no mapeamento ao campo de destino mapeado:

linhas de destino

A linha preta sólida mostrada na imagem acima é explicada na próxima seção, Loop Nodes.

O lado alvo do mapeamento também indica se um campo possui algum valor padrão (destacado em vermelho na imagem abaixo) ou junções (destacado em verde na imagem abaixo). Por exemplo, esta transformação insere dados em um banco de dados cujo id campos são incrementados automaticamente e cujos created_at O campo é definido como igual à hora atual por padrão. Também mostra que a tabela filha qa_employee foi unido no campo id à sua tabela pai qa_restaurant:

valores padrão do campo de destino anotados pp

Se um nó recolhido contiver mapeamentos de campo de destino, esse nó será mostrado em negrito para indicar que contém mapeamentos:

nó de destino recolhido

Nós de Loop

Um nó de loop é um nó de origem ou de destino com valores de dados repetidos, como itens de linha em uma fatura ou um conjunto de registros de clientes.

Quando os campos do nó de loop são mapeados, uma linha iteradora preta sólida aparece automaticamente, indicando que o processo de transformação percorrerá o conjunto de dados de origem. A localização das linhas do iterador geradas depende da multiplicidade dos nós do loop de origem correspondentes.

Uma transformação pode ter zero ou mais linhas iteradoras. Quando diversas linhas do iterador estão presentes, a precedência é dada de cima para baixo na estrutura de destino.

Para alternar a exibição de uma linha de iterador individual, clique diretamente na forma de círculo mais próxima do nó de destino:

alternância de nó de loop

A linha do nó do loop individual torna-se então um esboço laranja que, quando clicado novamente, exibe a linha completa:

esboço do nó de loop

Exemplo

Como exemplo de mapeamento de nó de loop, considere a seguinte estrutura de origem hierárquica contendo um nó de origem de nível superior (item) com campos que fornecem informações sobre uma empresa. Um nó de origem filho, locationDetails, inclui uma matriz (json$item.locationDetails$item.) de objetos com campos para vários locais de loja em uma empresa. Tanto o nó pai quanto o filho são considerados nós de loop porque os dados podem conter vários registros de empresa com vários registros de localização de loja para cada empresa.

Agora considere que esses dados estão sendo mapeados para uma estrutura de destino plana, resultando em um registro para cada local de loja. À medida que você mapeia os campos, uma linha iteradora aparece automaticamente conectando os nós de loop de origem e de destino. Esta linha indica que o destino fará um loop quantas vezes houver conjuntos repetidos de dados na origem ou, neste exemplo, fará um loop em cada registro de local de loja de cada empresa.

nó do loop

Mapear de uma Origem de Múltiplas Instâncias para um Destino de Instância Única

Quando o nó do loop de destino gerado depende de mais de um nó do loop de origem, pode ser necessário resolver um conflito de ocorrências múltiplas com o mapeamento.

Se a estrutura de dados de origem for uma matriz de vários objetos e estiver sendo mapeada para uma estrutura de dados de destino com um único objeto, esta caixa de diálogo será exibida:

a origem de múltiplas instâncias não pode ser mapeada para o destino de instância única

Para usar a primeira instância da origem no mapeamento, selecione Sim. Isso significa que apenas o primeiro registro será mapeado. Por exemplo, dado o mapeamento a seguir, apenas o primeiro registro de cliente na matriz é mapeado para a estrutura de destino contendo apenas um único cliente. Observe que cada campo de destino mapeado agora contém um script conforme indicado pelo ícone de script script.

resolução da instância do nó de loop

Ao alternar para o modo de script para qualquer campo mapeado, você verá que um #1 foi adicionado ao caminho do objeto de origem mapeado para indicar que a primeira instância está mapeada.

mapeamento de instância

Se você não quiser que a primeira instância da fonte seja usada, você pode especificar outra lógica usando as funções de resolução de instância (veja Funções de Instância).

Normalização de Dados

Se você estiver mapeando dados de uma estrutura simples para uma estrutura hierárquica, talvez os dados precisem ser normalizados antes de serem transformados.

Por padrão, o Harmony usa um algoritmo de normalização para construir a árvore de destino. Isso converterá a estrutura simples da origem em uma estrutura de origem hierárquica que pode então ser mapeada para a estrutura de destino hierárquica.

Na estrutura de destino, o elemento raiz e todos os elementos de múltiplas instâncias sob a raiz são usados para criar a estrutura dos elementos de origem secundários. Os atributos (ou campos) desses elementos de origem secundária são elementos de dados simples que são então usados nos mapeamentos do elemento de destino correspondente.

Com a estrutura de origem devidamente definida, o processo de normalização é simplificado para combinar nós com os mesmos pais.

Existem três opções para normalização:

  • Normalização Completa: Todos os elementos com o mesmo pai e todos os campos são reduzidos a um elemento. (Este é o padrão.)
  • Normalização Parcial: O mesmo que normalização completa, exceto que os filhos mais baixos não são normalizados.
  • Sem normalização: Cada registro simples cria uma ramificação de elementos; nenhuma redução de elementos é executada ao criar a estrutura hierárquica de origem.

É possível que a estrutura hierárquica contenha um único nó de instância. Nesse caso, apenas o primeiro elemento desta raiz será mantido e os registros simples que entrarem em conflito com este nó de dados raiz serão ignorados.

Para desabilitar a normalização, defina a variável Jitterbit jitterbit.transformation.disable_normalization para true (veja Variáveis de Transformação Jitterbit).

Instância e Mapeamento Múltiplo

O mapeamento de Transformação é o processo usado para definir o relacionamento de dados entre entradas e uma saída de dados resultante. Dependendo de quais tipos de estrutura de dados são usados, o mapeamento de transformação pode ser descrito como mapeamento de instância ou mapeamento múltiplo.

Mapeamento de Instância

O mapeamento de instância descreve quando o mapeamento de uma instância de destino depende possivelmente de mais de uma instância de uma origem. O mapeamento de instância pode ser simples para simples (um para um) ou hierárquico para simples (muitos para um).

Mapeamento Múltiplo

O mapeamento múltiplo descreve o mapeamento de duas estruturas de dados hierárquicas ou o mapeamento de uma estrutura única e plana que é, na verdade, de natureza hierárquica, com seus segmentos inferiores contendo vários conjuntos de valores, como pares nome/valor. O mapeamento múltiplo pode ser hierárquico para hierárquico (muitos para muitos) ou simples para hierárquico (um para muitos).

Exemplos

Exemplos de situações para mapeamento de instâncias e múltiplos podem ser encontrados na documentação do Design Studio:

Embora esses exemplos sejam para o Design Studio, os mesmos conceitos podem ser aplicados no Cloud Studio.

Para módulos de treinamento prático com exemplos de mapeamento de banco de dados simples e complexos, texto e arquivos XML, consulte Introdução ao Harmony Cloud Studio.