Я пытаюсь использовать ADF для следующего сценария:
- a JSON загружен в Azure хранилище BLOB-объектов, содержащее массив похожих объектов
- это JSON считывается ADF с помощью операции поиска и загружается через веб-активность во внешний приемник
Я не могу использовать операцию копирования, поскольку мне нужно создать полезную нагрузку JSON для Веб-активность, поэтому мне нужно найти массив и вставить его следующим образом (полезная нагрузка веб-активности):
{
"some field": "value",
"some more fields": "value",
...
"items": @{activity('GetJsonLookupActivity').output.value}
}
У операции поиска есть известное ограничение верхнего предела в 5000 строк за раз. Если JSON больше, будут прочитаны только 5000 верхних строк, а все остальное будет проигнорировано.
Я знаю это, поэтому у меня есть система, которая разбивает полезные данные на куски по 5000 строк перед загрузкой в хранилище. Но я не единственный пользователь, поэтому есть основания опасаться, что кто-то другой попытается загрузить большие файлы, и конвейер будет молча проходить с частичной загрузкой, в то время как пользователь, очевидно, будет ожидать загрузки всех строк.
Я предложил две концепции для обхода проблемы, но я не вижу, как их реализовать:
Можно ли как-нибудь проверить, есть ли файл JSON слишком велик и выйдет из строя конвейер, если так? Похоже, что операция поиска не позволяет считать строки, а операция получения метаданных возвращает только размер в байтах.
В качестве альтернативы Документы MSDN предлагают обходной путь копирования данных в foreach l oop. Но я не могу понять, как я использовал бы Lookup, чтобы сначала получить строки 1-5000, а затем 5001-10000 et c. от JSON. Это достаточно просто с SQL с использованием OFFSET N FETCH NEXT 5000 ROWS ONLY
, но как это сделать с JSON?