Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ПРИМЕНИМО К:
Фабрика данных Azure
Azure Synapse Analytics
Потоки данных доступны как в конвейерах Фабрика данных Azure, так и в Azure Synapse Analytics конвейерах. Эта статья относится к сопоставлению потоков данных. Если вы не знакомы с преобразованиями, ознакомьтесь с вводной статьей "Преобразование данных с помощью сопоставления потоков данных".
Совет
Эквивалентное преобразование (развернуть столбец) в Dataflow 2-го поколения см. в руководстве по потоку данных 2-го поколения для сопоставления пользователей потока данных.
Используйте плоское преобразование, чтобы получить значения массива из иерархических структур, таких как JSON, и преобразовать их в отдельные строки. Этот процесс называется денормализацией.
Настройка
Преобразование в плоское содержит следующие параметры конфигурации.
Unroll by (Развернуть по)
Выберите массив, который нужно развернуть. Выходные данные имеют одну строку для каждого элемента в каждом массиве. Если во входной строке массив имеет значение NULL или пустой, то есть одна выходная строка, где развернутые значения равны NULL. Вы можете развернуть более одного массива на каждое преобразование Flatten. Нажмите кнопку "плюс" (+), чтобы включить несколько массивов в одно преобразование Flatten. Здесь можно использовать метафункции потока данных ADF, включая name и type, и использовать сопоставление шаблонов для разворачивания массивов, которые соответствуют этим критериям. При включении нескольких массивов в одно преобразование Flatten результаты являются декартовским продуктом всех возможных значений массива.
Развёртывание корня
По умолчанию преобразование в плоскую структуру разворачивает массив в верхнюю часть иерархии, в которой он находится. При необходимости можно выбрать массив в качестве корня развертки. Корень развертывания должен быть массивом сложных объектов, который либо сам является массивом для развертывания, либо содержит его. Если выбран корневой элемент разворачивания, выходные данные содержат по крайней мере одну строку для каждого элемента в корневом элементе разворачивания. Если во входной строке отсутствуют элементы в основной ветке развёртки, она удаляется из выходных данных. При выборе узла развертывания всегда выводится количество строк, не большее, чем при поведении по умолчанию.
Flatten mapping (Приведение сопоставления к плоской структуре)
Аналогично трансформации выборки, выберите проекцию новой структуры из входных полей и денормализованного массива. При сопоставлении денормализованного массива выходной столбец совпадает с типом данных, что и массив. Если распаковывание по массиву является массивом сложных объектов, содержащих вложенные массивы, сопоставление элемента этого субмассива выводит массив.
Чтобы проверить выходные данные сопоставления, воспользуйтесь вкладкой проверки и возможностью предварительного просмотра данных.
Сопоставление на основе правил
Преобразование flatten поддерживает сопоставление на основе правил, которое позволяет создавать динамические и гибкие преобразования, уплощая массивы на основе правил и структуры на основе уровней иерархии.
Соответствующее условие
Введите условие сопоставления шаблона для столбца или столбцов, которые вы хотите свести, используя либо точное сопоставление, либо шаблоны. Пример: like(name,'cust%')
Углубленный обход столбцов
Необязательный параметр, который указывает службе обрабатывать все подстолбцы сложного объекта по отдельности, а не обрабатывать сложный объект как целый столбец.
Уровень иерархии
Выберите уровень иерархии, которую вы хотите развернуть.
Имя соответствует (регулярному выражению)
При необходимости вы можете выразить свое имя в виде регулярного выражения в этом поле, а не использовать соответствующее условие.
Примеры
Приведенные ниже примеры преобразования в плоскую структуру основаны на следующем объекте JSON:
{
"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"}
Отсутствует развертывание с массивом строк
| Unroll by (Развернуть по) | Развёртывание корня | Проекция |
|---|---|---|
| goods.customers | нет | имя клиент = товар. клиент |
Выходные данные
{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}
Нельзя развернуть корневой элемент сложного массива
| Unroll by (Развернуть по) | Развёртывание корня | Проекция |
|---|---|---|
| товары.заказы.отправлено.товарыЗаказа | нет | имя orderId = goods.orders.orderId itemName = наименованиеТовара.заказы.отправленные.элементыЗаказа.наименованиеТовара itemQty = товары.заказы.shipped.orderItems.itemQty местоположение = местоположение |
Выходные данные
{ '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'}
Тот же корень, что и развертываемый массив
| Unroll by (Развернуть по) | Развёртывание корня | Проекция |
|---|---|---|
| товары.заказы | товары.заказы | имя товары.заказы.отгружены.заказанныеТовары.имяТовара товары.клиенты расположение |
Выходные данные
{ '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'}
Развернуть корень сложного массива
| Unroll by (Развернуть по) | Развёртывание корня | Проекция |
|---|---|---|
| товары.заказы.отправлены.пунктЗаказа | товары.заказы | имя orderId = goods.orders.orderId itemName = наименованиеТовара.заказы.отправленные.элементыЗаказа.наименованиеТовара itemQty = товары.заказы.shipped.orderItems.itemQty местоположение = местоположение |
Выходные данные
{ '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'}
Скрипт потока данных
Синтаксис
<incomingStream>
foldDown(unroll(<unroll cols>),
mapColumn(
name,
each(<array>(type == '<arrayDataType>')),
each(<array>, match(true())),
location
)) ~> <transformationName>
Пример
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)
Связанный контент
- Используйте преобразование "Поворот" чтобы свести строки в столбцы.
- Используйте преобразование Unpivot для переноса столбцов в строки.