Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
APLICA-SE A:
Azure Data Factory
Azure Synapse Analytics
Dica
Data Factory no Microsoft Fabric é a próxima geração de Azure Data Factory, com uma arquitetura mais simples, IA interna e novos recursos. Se você não estiver familiarizado com a integração de dados, comece com Fabric Data Factory. As cargas de trabalho existentes do ADF podem ser atualizadas para Fabric para acessar novos recursos em ciência de dados, análise em tempo real e relatórios.
Os fluxos de dados estão disponíveis em os pipelines do Azure Data Factory e os pipelines do Azure Synapse Analytics. Este artigo se aplica ao fluxo de dados de mapeamento. Se você for novo em transformações, consulte o artigo introdutório Transformar dados usando fluxos de dados de mapeamento.
Dica
Para a transformação equivalente (Expandir coluna) no Dataflow Gen2, consulte um guia para o Dataflow Gen2 para mapear usuários de fluxo de dados.
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 achatar contém as seguintes definições de configuração.
Expandir por
Selecione uma matriz para desenrolar. Os dados de saída têm uma linha por item em cada matriz. Se o registro por matriz na linha de entrada for nulo ou vazio, haverá uma linha de saída com valores desenrolados como nulos. Você pode desenrolar mais de um array por transformação Flatten. Selecione o botão de adição (+) para incluir várias matrizes em uma única transformação Flatten. Você pode usar as metafunções de fluxo de dados do ADF aqui, incluindo name e type, e usar o casamento de padrões para desdobrar matrizes que correspondam a esses critérios. Ao incluir várias matrizes em uma única transformação Flatten, seus resultados sã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 cancelamento de registro for selecionada, os dados de saída conterão pelo menos uma linha por itens na raiz de cancelamento de registro. Se a linha de entrada não tiver nenhum item na raiz de desenrolamento, é removida dos dados de saída. Escolher uma raiz de desenrolamento sempre resulta em um número menor ou igual de linhas comparado ao comportamento padrão.
Mapeamento de mesclagem
Semelhante à transformação de seleção, defina a projeção da nova estrutura com base nos campos de entrada e na matriz desnormalizada. Se uma matriz desnormalizada for mapeada, a coluna de saída será o mesmo tipo de dados que a matriz. Se o unroll por matriz for uma matriz de objetos complexos que contém subarrays, mapear um item desse subarray retornará uma matriz.
Consulte a aba de inspeção e a visualização de dados para verificar o resultado do seu 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 matrizes com base em regras e estruturas com base nos 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 correspondente.
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 (Note: No changes are actually made since preserving the exact coding language is crucial for accuracy in a technical field.) location = local |
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 |
|---|---|---|
| pedidos_de_mercadorias | pedidos_de_mercadorias | nome 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 | pedidos_de_mercadorias | nome orderId = goods.orders.orderId itemName = goods.orders.shipped.orderItems.itemName itemQty = goods.orders.shipped.orderItems.itemQty (Note: No changes are actually made since preserving the exact coding language is crucial for accuracy in a technical field.) location = local |
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.