Achatar a transformação no mapeamento do fluxo de dados
APLICA-SE A: Azure Data Factory Azure Synapse Analytics
Gorjeta
Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!
Os fluxos de dados estão disponíveis no Azure Data Factory e no Azure Synapse Pipelines. Este artigo aplica-se ao mapeamento de fluxos de dados. Se você é novo em transformações, consulte o artigo introdutório Transformar dados usando um fluxo de dados de mapeamento.
Use a transformação de nivelamento para pegar valores de matriz dentro de estruturas hierárquicas, como JSON, e desenrolá-los em linhas individuais. Este processo é conhecido como desnormalização.
Configuração
A transformação de nivelamento contém as seguintes definições de configuração.
Desenrolar por
Selecione uma matriz para desenrolar. Os dados de saída terão uma linha por item em cada matriz. Se o desenrolar por matriz na linha de entrada for nulo ou vazio, haverá uma linha de saída com valores não rolados como nulos. Você tem a opção de desenrolar mais de uma matriz por transformação Flatten. Clique no botão de adição (+) para incluir várias matrizes em uma única transformação Flatten. Você pode usar metafunções de fluxo de dados do ADF aqui, incluindo name
e type
usar a correspondência de padrões para desenrolar matrizes que correspondam a esses critérios. Ao incluir várias matrizes em uma única transformação Flatten, seus resultados serão um produto cartesiano de todos os valores de matriz possíveis.
Desenrolar raiz
Por padrão, a transformação de nivelamento desenrola uma matriz para o topo da hierarquia em que ela existe. Opcionalmente, você pode selecionar uma matriz como sua raiz de desenrolar. A raiz unroll deve ser uma matriz de objetos complexos que é ou contém o unroll by array. Se uma raiz unroll for selecionada, os dados de saída conterão pelo menos uma linha por itens na raiz unroll. Se a linha de entrada não tiver nenhum item na raiz de unroll, ela será descartada dos dados de saída. A escolha de uma raiz de unroll sempre produzirá um número menor ou igual de linhas do que o comportamento padrão.
Mapeamento de nivelamento
Semelhante à transformação select, escolha a projeção da nova estrutura a partir dos campos de entrada e da matriz desnormalizada. Se uma matriz desnormalizada for mapeada, a coluna de saída será do mesmo tipo de dados que a matriz. Se o desenrolar por matriz for uma matriz de objetos complexos que contém submatrizes, o mapeamento de um item dessa matriz produzirá uma matriz.
Consulte a guia inspecionar e a visualização de dados para verificar a saída do mapeamento.
Mapeamento baseado em regras
A transformação de nivelamento oferece suporte ao mapeamento baseado em regras, permitindo que você crie transformações dinâmicas e flexíveis que nivelarão matrizes com base em regras e nivelarão estruturas com base em níveis de hierarquia.
Condição de correspondência
Insira uma condição de correspondência de padrão para a coluna ou colunas que você deseja nivelar usando correspondência exata ou padrões. Exemplo: like(name,'cust%')
Travessia profunda da coluna
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ê gostaria de expandir.
Correspondências de nomes (regex)
Opcionalmente, opte por 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 obter os exemplos abaixo da transformação de achatamento:
{
"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"}
Sem desenrolar raiz com matriz de cadeia de caracteres
Desenrolar por | Desenrolar raiz | Projeção |
---|---|---|
goods.clientes | Nenhuma | Designação cliente = goods.customer |
Saída
{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}
Sem desenrolar raiz com array complexo
Desenrolar por | Desenrolar raiz | Projeção |
---|---|---|
goods.orders.shipped.orderItems | Nenhuma | Designação orderId = goods.orders.orderId itemName = goods.orders.shipped.orderItems.itemName itemQty = goods.orders.shipped.orderItems.itemQty localização = localização |
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 que a matriz de desenrolar
Desenrolar por | Desenrolar raiz | Projeção |
---|---|---|
goods.encomendas | goods.encomendas | Designação goods.orders.shipped.orderItems.itemName goods.clientes localização |
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'}
Desenrolar raiz com array complexo
Desenrolar por | Desenrolar raiz | Projeção |
---|---|---|
goods.orders.shipped.orderItem | goods.encomendas | Designação orderId = goods.orders.orderId itemName = goods.orders.shipped.orderItems.itemName itemQty = goods.orders.shipped.orderItems.itemQty localização = localização |
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údos relacionados
- Use a transformação Pivot para girar linhas para colunas.
- Use a transformação Unpivot para girar colunas em linhas.