#rest #azure-data-factory
#rest #azure-data-factory
Вопрос:
Helo eveyone,
Я довольно новичок в фабрике данных, и мне нужно скопировать информацию из Rest API Dynamics Business Central. Я борюсь с объектами типа «Детали», такими как «invoiceSalesHeader».
API для этого объекта заставляет меня указывать идентификатор заголовка в качестве фильтра. В этом смысле мне пришлось бы выполнить цикл x раз (несколько тысяч) и вызвать Rest API для восстановления строк каждого счета-фактуры продажи. Я нахожу это совершенно нелепым и пытаюсь найти другие способы получения информации.
Чтобы избежать этого, я пытаюсь получить информацию, вызвав объект «SalesInvoice» и используя «$ expand= salesInvoiceLines».
Это дает мне необходимую информацию, но внутри действия по копированию фабрики данных я борюсь с тем, что я должен указать в качестве «ссылки на коллекцию», чтобы в итоге получалась одна строка для каждой строки salesInvoiceLine.
Возвращаемые данные представляют собой массив счетов-фактур продаж с подмассивом строк счетов-фактур.
Если я выберу «salesInvoiceLines» в качестве ссылки на коллекцию, я получу «$ [‘value’] [0] [‘salesInvoiceLines’]», и это даст мне только строки для первого счета-фактуры (поскольку индекс равен нулю).
Что я должен поместить в ссылку на коллекцию, чтобы получить одну строку для каждой строки salesInvoiceLine
Комментарии:
1. В ADF не поддерживается foreach вложенный массив.
2. Вы можете сохранить файл json в Azure Cloud, а затем использовать Azure data flow для его выравнивания.
3. Привет @David Laplante, пожалуйста, поправьте меня, если я неправильно понял вас в ответе.
4. @Дэвид Лапланте, как вы решили эту проблему?
Ответ №1:
Не поддерживается foreach вложенный массив json в ADF.
В качестве альтернативы мы можем использовать плоскую операцию в потоке данных для выравнивания вложенного массива json.
Вот мой пример:
это мой пример данных json, структура похожа на вашу:
[
{
"id": 1,
"Value": "January",
"orders":[{"orderid":1,"orderno":"qaz"},{"orderid":2,"orderno":"edc"}]
},
{
"id": 2,
"Value": "February",
"orders":[{"orderid":3,"orderno":"wsx"},{"orderid":4,"orderno":"rfv"}]
},
{
"id": 3,
"Value": "March",
"orders":[{"orderid":5,"orderno":"rfv"},{"orderid":6,"orderno":"tgb"}]
},
{
"id": 11,
"Value": "November",
"orders":[{"orderid":7,"orderno":"yhn"},{"orderid":8,"orderno":"ujm"}]
}
]
В потоке данных мы можем выбрать заголовок вложенного массива json, вот orders
:
Затем мы видим результат, мы транспонировали массив JSON orders
с 2 объектами (orderid, orderno) в 8 строк выравнивания: