Spłaszczanie transformacji w przepływie danych mapowania
DOTYCZY: Azure Data Factory Azure Synapse Analytics
Napiwek
Wypróbuj usługę Data Factory w usłudze Microsoft Fabric — rozwiązanie analityczne typu all-in-one dla przedsiębiorstw. Usługa Microsoft Fabric obejmuje wszystko, od przenoszenia danych do nauki o danych, analizy w czasie rzeczywistym, analizy biznesowej i raportowania. Dowiedz się, jak bezpłatnie rozpocząć nową wersję próbną !
Przepływy danych są dostępne zarówno w usłudze Azure Data Factory, jak i w potokach usługi Azure Synapse. Ten artykuł dotyczy przepływów danych mapowania. Jeśli dopiero zaczynasz transformacje, zapoznaj się z artykułem wprowadzającym Przekształcanie danych przy użyciu przepływu danych mapowania.
Użyj przekształcenia spłaszczania, aby pobrać wartości tablic wewnątrz struktur hierarchicznych, takich jak JSON, i wyrejestrować je do poszczególnych wierszy. Ten proces jest nazywany denormalizacją.
Konfigurowanie
Przekształcenie spłaszczane zawiera następujące ustawienia konfiguracji.
Wyrejestrowywanie według
Wybierz tablicę do wyrejestrowania. Dane wyjściowe będą miały jeden wiersz na element w każdej tablicy. Jeśli wyrejestrowanie według tablicy w wierszu wejściowym ma wartość null lub jest puste, będzie jeden wiersz wyjściowy z wartościami wyrejestrowanym jako null. Istnieje możliwość wyrejestrowania więcej niż jednej tablicy na przekształcenie spłaszczane. Kliknij przycisk plus (+), aby uwzględnić wiele tablic w jednej transformacji Spłaszczanej. W tym miejscu możesz użyć funkcji meta przepływu danych usługi ADF, w tym name
i type
użyć dopasowania wzorca do wyrejestrowywania tablic, które spełniają te kryteria. W przypadku dołączania wielu tablic w jednej transformacji spłaszczanej wyniki będą produktem kartezjańskim wszystkich możliwych wartości tablicowych.
Wyrejestrowywanie katalogu głównego
Domyślnie przekształcenie spłaszcza wyrejestruje tablicę na początku hierarchii, w którą istnieje. Opcjonalnie możesz wybrać tablicę jako katalog główny wyrejestrowania. Katalog główny wyrejestrowania musi być tablicą obiektów złożonych, które są lub zawierają wyrejestrowanie według tablicy. Jeśli wybrano katalog główny wyrejestrowania, dane wyjściowe będą zawierać co najmniej jeden wiersz na elementy w katalogu głównym wyrejestrowania. Jeśli wiersz wejściowy nie zawiera żadnych elementów w katalogu głównym wyrejestrowania, zostanie on usunięty z danych wyjściowych. Wybranie katalogu głównego wyrejestrowania zawsze spowoduje zwrócenie mniejszej lub równej liczby wierszy niż zachowanie domyślne.
Mapowanie spłaszczane
Podobnie jak w przypadku transformacji wyboru, wybierz projekcję nowej struktury z pól przychodzących i zdenormalizowanej tablicy. Jeśli zostanie zamapowana zdenormalizowana tablica, kolumna wyjściowa będzie taka sama jak tablica. Jeśli wyrejestrowanie według tablicy jest tablicą złożonych obiektów, które zawierają podarray, mapowanie elementu tej podarry spowoduje wyprowadzanie tablicy.
Zapoznaj się z kartą inspekcji i podglądem danych, aby zweryfikować dane wyjściowe mapowania.
Mapowanie oparte na regułach
Transformacja spłaszczania obsługuje mapowanie oparte na regułach, co umożliwia tworzenie dynamicznych i elastycznych przekształceń, które spłaszczą tablice oparte na regułach i spłaszczeniu struktur na podstawie poziomów hierarchii.
Warunek dopasowania
Wprowadź warunek dopasowania wzorca dla kolumny lub kolumn, które chcesz spłaszczać przy użyciu dokładnych dopasowań lub wzorców. Przykład: like(name,'cust%')
Przechodzenie głębokiej kolumny
Opcjonalne ustawienie, które informuje usługę o obsłudze wszystkich podkolum obiektów złożonych indywidualnie zamiast obsługiwać obiekt złożony jako całą kolumnę.
Poziom hierarchii
Wybierz poziom hierarchii, który chcesz rozwinąć.
Dopasowania nazw (wyrażeń regularnych)
Opcjonalnie możesz wyrazić swoje dopasowanie nazwy jako wyrażenie regularne w tym polu, zamiast używać powyższego warunku dopasowania.
Przykłady
Zapoznaj się z poniższym obiektem JSON, aby zapoznać się z poniższymi przykładami spłaszczania przekształcenia
{
"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"}
Brak wyrejestrowywania katalogu głównego z tablicą ciągów
Wyrejestrowywanie według | Wyrejestrowywanie katalogu głównego | Projekcja |
---|---|---|
goods.customers | Brak | nazwa customer = goods.customer |
Wyjście
{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}
Brak wyrejestrowywania katalogu głównego ze złożoną tablicą
Wyrejestrowywanie według | Wyrejestrowywanie katalogu głównego | Projekcja |
---|---|---|
goods.orders.shipped.orderItems | Brak | nazwa orderId = goods.orders.orderId itemName = goods.orders.shipped.orderItems.itemName itemQty = goods.orders.shipped.orderItems.itemQty location = location |
Wyjście
{ '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'}
Ten sam katalog główny co tablica wyrejestrowania
Wyrejestrowywanie według | Wyrejestrowywanie katalogu głównego | Projekcja |
---|---|---|
goods.orders | goods.orders | nazwa goods.orders.shipped.orderItems.itemName goods.customers lokalizacja |
Wyjście
{ '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'}
Wyrejestrowywanie katalogu głównego ze złożoną tablicą
Wyrejestrowywanie według | Wyrejestrowywanie katalogu głównego | Projekcja |
---|---|---|
goods.orders.shipped.orderItem | goods.orders | nazwa orderId = goods.orders.orderId itemName = goods.orders.shipped.orderItems.itemName itemQty = goods.orders.shipped.orderItems.itemQty location = location |
Wyjście
{ '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'}
Skrypt przepływu danych
Składnia
<incomingStream>
foldDown(unroll(<unroll cols>),
mapColumn(
name,
each(<array>(type == '<arrayDataType>')),
each(<array>, match(true())),
location
)) ~> <transformationName>
Przykład
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)
Powiązana zawartość
- Użyj przekształcenia przestawnego, aby przestawienia wierszy do kolumn.
- Użyj przekształcenia Co przestawne, aby przestawienia kolumn do wierszy.