Transformação de mesclagem no fluxo de dados de mapeamento

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!

Os fluxos de dados estão disponíveis nos pipelines do Azure Data Factory e do Azure Synapse. Este artigo se aplica ao fluxo de dados de mapeamento. Se você for iniciante nas transformações, veja o artigo introdutório Transformar dados usando um fluxo de dados de mapeamento.

Com a transformação de mesclagem, você utiliza valores de matriz de estruturas hierárquicas, como JSON, expandindo-os em linhas individuais. Esse processo é conhecido como desnormalização.

Configuração

A transformação de mesclagem contém as seguintes definições de configuração.

Screenshot that shows flatten settings.

Expandir por

Selecione uma matriz para expandir. Os dados de saída terão uma linha por item em cada matriz. Se a expansão por matriz na linha de entrada for nula ou vazia, haverá uma linha de saída com valores expandidos como nulos. Você tem a opção de cancelar o registro de mais de uma matriz por transformação de Mesclagem. Clique no botão de adição (+) para incluir várias matrizes em uma única transformação de Mesclagem. Você pode usar as metafunções de fluxo de dados do ADF aqui, incluindo name e type e usar a correspondência de padrões para cancelar o registro de matrizes que correspondam a esses critérios. Ao incluir várias matrizes em uma única transformação de Mesclagem, seus resultados serão um produto cartesiano de todos os valores de matriz possíveis.

Screenshot that shows flatten results.

Raiz de expansão

Por padrão, a transformação de mesclagem expande uma matriz na parte superior da hierarquia na qual ela existe. Opcionalmente, você pode selecionar uma matriz como sua raiz de expansão. A raiz de expansão deve ser uma matriz de objetos complexos que seja ou contenha a matriz de expansão. Se uma raiz de expansão for selecionada, os dados de saída conterão pelo menos uma linha por item na raiz de expansão. Se a linha de entrada não tiver nenhum item na raiz de expansão, ela será descartada dos dados de saída. A escolha de uma raiz de expansão sempre produzirá um número menor ou igual de linhas que o comportamento padrão.

Mapeamento de mesclagem

Semelhante à transformação de seleção, escolha a projeção da nova estrutura com base em campos de entrada e na matriz desnormalizada. Se uma matriz desnormalizada for mapeada, a coluna de saída terá o mesmo tipo de dados da matriz. Se a matriz de expansão for uma matriz de objetos complexos que contém submatrizes, o mapeamento de um item dessas submatrizes produzirá uma matriz.

Consulte a guia de inspeção e a visualização de dados para verificar sua saída de mapeamento.

mapeamento baseado em regras

A transformação de achatamento dá suporte ao mapeamento baseado em regras, permitindo que você crie transformações dinâmicas e flexíveis que achatam as matrizes com base em regras e mesclam estruturas com base em níveis de hierarquia.

Flatten pattern

Condição de correspondência

Insira um padrão de condição de correspondência para a coluna ou colunas que você deseja mesclar usando padrões ou correspondências exatas. Exemplo: like(name,'cust%')

Percurso de coluna profunda

Configuração opcional que informa ao serviço para manipular todas as subcolunas de um objeto complexo individualmente, em vez de manipular o objeto complexo como uma coluna inteira.

Nível de hierarquia

Escolha o nível da hierarquia que você deseja expandir.

Correspondências de nome (Regex)

Opcionalmente, escolha expressar sua correspondência de nome como uma expressão regular nesta caixa, em vez de usar a condição de correspondência acima.

Exemplos

Consulte o seguinte objeto JSON para ver os exemplos abaixo da transformação de mesclagem

{
  "name":"MSFT","location":"Redmond", "satellites": ["Bay Area", "Shanghai"],
  "goods": {
    "trade":true, "customers":["government", "distributer", "retail"],
    "orders":[
        {"orderId":1,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":2}]}},
        {"orderId":2,"orderTotal":323.34,"shipped":{"orderItems":[{"itemName":"Mice","itemQty":2},{"itemName":"Keyboard","itemQty":1}]}}
    ]}}
{"name":"Company1","location":"Seattle", "satellites": ["New York"],
  "goods":{"trade":false, "customers":["store1", "store2"],
  "orders":[
      {"orderId":4,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":3}]}},
      {"orderId":5,"orderTotal":343.24,"shipped":{"orderItems":[{"itemName":"Chair","itemQty":4},{"itemName":"Lamp","itemQty":2}]}}
    ]}}
{"name": "Company2", "location": "Bellevue",
  "goods": {"trade": true, "customers":["Bank"], "orders": [{"orderId": 4, "orderTotal": 123.34}]}}
{"name": "Company3", "location": "Kirkland"}

Nenhuma raiz de expansão com a matriz de cadeia de caracteres

Expandir por Raiz de expansão Projeção
goods.customers Nenhum nome
customer = goods.customer

Saída

{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}

Nenhuma raiz de expansão com matriz complexa

Expandir por Raiz de expansão Projeção
goods.orders.shipped.orderItems Nenhum nome
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = location

Saída

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}
{ 'Company3', null, null, null, 'Kirkland'}

Mesma raiz da matriz de expansão

Expandir por Raiz de expansão Projeção
goods.orders goods.orders nome
goods.orders.shipped.orderItems.itemName
bens.clientes
local

Saída

{ 'MSFT', ['Laptop','Charger'], ['government','distributer','retail'], 'Redmond'}
{ 'MSFT', ['Mice', 'Keyboard'], ['government','distributer','retail'], 'Redmond'}
{ 'Company1', ['Laptop','Charger'], ['store', 'store2'], 'Seattle'}
{ 'Company1', ['Chair', 'Lamp'], ['store', 'store2'], 'Seattle'}
{ 'Company2', null, ['Bank'], 'Bellevue'}

Raiz de expansão com matriz complexa

Expandir por Raiz de expansão Projeção
goods.orders.shipped.orderItem goods.orders nome
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = location

Saída

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}

Script de fluxo de dados

Sintaxe

<incomingStream>
foldDown(unroll(<unroll cols>),
    mapColumn(
        name,
        each(<array>(type == '<arrayDataType>')),
        each(<array>, match(true())),
        location
    )) ~> <transformationName>

Exemplo

source foldDown(unroll(goods.orders.shipped.orderItems, goods.orders),
    mapColumn(
        name,
        orderId = goods.orders.orderId,
        itemName = goods.orders.shipped.orderItems.itemName,
        itemQty = goods.orders.shipped.orderItems.itemQty,
        location = location
    ),
    skipDuplicateMapInputs: false,
    skipDuplicateMapOutputs: false)