Выходные данные действия сценария конвейера ADF — установка переменных

У меня довольно легко выбрать базу данных SQL Azure, которая возвращает 2 строки с 2 атрибутами. На выходе это выглядит так:

{
    "resultSetCount": 1,
    "recordsAffected": 0,
    "resultSets": [
        {
            "rowCount": 2,
            "rows": [
                {
                    "Name": "Adam",
                    "Surname": "Black"                  
                },
                {
                    "Name": "Richard",
                    "Surname": "Nolan"
                }
            ]
        }
    ],

И я хочу установить переменную, чтобы получить значение {"Name":["Adam","Richard"]}, но я вообще не могу этого добиться.

@activity('Script1').output.resultSets[0].rows[0].Name - работает не так, как я ожидал

Какой-нибудь совет, пожалуйста?

Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
0
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для достижения вашего требования вам необходимо использовать комбинацию действия For-each и действия добавления переменной.

Сначала создайте переменную массива без значений в разделе переменных конвейера. Здесь я создал две переменные массива, где вторая переменная предназначена только для отображения результата и не требуется.

Возьмите действие for-each и передайте ему массив rows@activity('Script1').output.resultSets[0].rows из действия Script и установите здесь флажок Sequential, поскольку он сохраняет порядок массива.

Внутри for-each выполните действие добавления переменной и выберите переменную массива, созданную ранее. Придайте ему выражение @item().Name. Он добавляет значение Name к созданному массиву на каждой итерации.

В конце for-each массив результатов будет сохранен в массиве mynames, и вы сможете использовать его в дальнейших действиях в соответствии с вашими требованиями. Чтобы просто показать результат, я присвоил эту переменную массива другой переменной массива res_display в действии установки переменной после действия for-each.

Отладьте конвейер, и вы получите ожидаемый массив:

Большое спасибо за подробную инструкцию - все работает именно так, как я хочу. И у меня есть дополнительный вопрос, если можно. Я хочу использовать эту переменную для функции Azure (python) в качестве входных данных для тела, например: "{"Name": ["Rakesh","John"]}" Я установил переменную @concat('"{"Name":' ,variables('mynames'), '}"'), но на выходе получается ""{"Name":["Rakesh","John"]}"" и я не могу избавиться от \ символов. Большое спасибо

Martin Konecny 09.08.2024 08:57

Если вы хотите передать его как строку, вам не нужно беспокоиться о символе \, поскольку это escape-символ для ". Он не будет передан в функцию. В функцию будет передана только необходимая строка.

Rakesh Govindula 09.08.2024 09:59

@MartinKonecny ​​Хорошо принять решение, если оно решило проблему. Это во благо сообщества SO, смотрите SO Ссылка

Naveen Sharma 09.08.2024 10:09

Я вижу, ок, это хорошо. И если ожидаемым json для моей функции является вызов тела {"Name": ["Rakesh","John"]}, но я вижу на входе "{"Name": ["Rakesh","John"]}" . Могу ли я удалить «с начала и с конца. Или я тоже могу это игнорировать?»

Martin Konecny 09.08.2024 11:19

Если вы хотите передать его как строку, вы можете это сделать. Если это должен быть JSON, вы можете удалить их или использовать функцию @json(concat('{"Name":',string(variables(<your_variable_name‌​>)),'}')) для переноса строки JSON. Эта функция преобразует строку JSON в объект JSON.

Rakesh Govindula 09.08.2024 11:30

Я получаю сообщение об ошибке: «Переменная «OutputJSON» типа «String» не может быть инициализирована или обновлена ​​значением типа «Object». Переменная «OutputJSON» поддерживает только значения типов «String». и я использовал @json(concat('{"Name":',string(variables('Name')),'}')). Если я правильно понимаю, ввод представляет собой массив со строкой (переменные (<имя_вашей_переменной>)) я преобразую его в строку JSON, затем объединяю его с помощью '{"Name":' a с @json при запросе, я должен получить результат { "Имя": ["Ракеш","Джон"]} без " " Правильно ли, что переменная определяется как строка? или где я ошибся? Спасибо

Martin Konecny 12.08.2024 11:02

Затем передайте массив как строку, что означает удаление функции @json(). В вашей функции преобразуйте эту строку JSON в обычный JSON.

Rakesh Govindula 12.08.2024 14:07

Другие вопросы по теме

Как записать имя файла пользовательского ввода в Python
Когда я устанавливаю флажок, он отлично отображает свое значение. Когда я отменяю его выбор, он продолжает отображаться
Gnuplot сохраняет вывод команды в переменную
Случайный лес/вероятностный расчет выходного дерева решений: использование положительных выборок выходных листьев/общего количества выборок выходных листьев
Сохраните результат вложенного цикла for с двумя факторными переменными
Как мне сообщить программе переднего плана, чтобы она отправляла выходные данные в буферизацию, а не на дисплей?
Google Gemini API возвращает неточную информацию
Как расположить тег/элемент привязки, созданный JavaScript, на HTML-странице?
Как добавить строки с именем и датой при преобразовании файла в верхний регистр?
Сценарии Python не выдают сообщения об ошибке при сбое из-за ошибки, даже после обновления версии и перестройки виртуальных сред. Как исправить?