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.
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.
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.
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 | name 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 | name 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 | name goods.orders.shipped.orderItems.itemName goods.customers 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 | name 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)
Conteúdo relacionado
- Use a Transformação de dinamização para transformar linhas em colunas.
- Use a transformação de anulação de dinamização para transformar colunas em linhas.