Преобразование количества строк в INT в фабрике данных Azure
Я пытаюсь использовать действие поиска для возврата количества строк. Я могу это сделать, но как только я это сделаю, я хотел бы запустить для него оператор If, и если счетчик возвращает более 20 миллионов строк, я хочу выполнить дополнительный конвейер для дальнейшего манипулирования таблицей. Однако проблема в том, что я не могу сравнить возвращаемое значение со статическим целым числом. Ниже приведено текущее динамическое выражение, которое у меня есть для этого оператора If:
@greater(int(активность ('COUNT_RL_WK_GRBY_LOOKUP'). вывод),20000000)
и при запуске возвращается следующая ошибка: { "errorCode": "InvalidTemplate", "message": "Функция 'int' была вызвана с недопустимым параметром. Значение не может быть преобразовано в целевой тип", "failureType": "UserError", "target": "If Condition1", "details": "" }
Можно ли преобразовать это возвращаемое значение в целое число, чтобы провести сравнение? Если нет, можно ли как-то обойтись для достижения желаемого результата?
2 ответа
Похоже, проблема в вашем динамическом выражении лица. Исправьте динамическое выражение, как показано ниже, и повторите попытку.
Если
firstRowOnly
установлено значение true:@greater(int(activity('COUNT_RL_WK_GRBY_LOOKUP').output.firstRow.propertyname),20000000)
Если
firstRowOnly
установлено значение false:@greater(int(activity('COUNT_RL_WK_GRBY_LOOKUP').output.value[zero based index].propertyname),20000000)
Результат поиска возвращается в
output
раздел результата прогона активности.- когда
firstRowOnly
установлено значение true (по умолчанию), формат вывода показан в следующем коде. Результат поиска находится под фиксированным ключом firstRow. Чтобы использовать результат в последующей деятельности, используйте шаблон@{activity('MyLookupActivity').output.firstRow.TableName}
. Пример выходного JSON-кода выглядит следующим образом:
{ "firstRow": { "Id": "1", "TableName" : "Table1" } }
- когда
firstRowOnly
установлено значение false, формат вывода показан в следующем коде. Поле счетчика показывает, сколько записей возвращается. Подробные значения отображаются под массивом фиксированных значений. В таком случае за действием поиска следует действие по каждому элементу. Вы передаете массив значений в поле элементов деятельности ForEach, используя шаблон@activity('MyLookupActivity').output.value
. Для доступа к элементам в массиве значений используйте следующий синтаксис:@{activity('lookupActivity').output.value[zero based index].propertyname}
. Примером является@{activity('lookupActivity').output.value[0].tablename}
. Пример выходного JSON-кода выглядит следующим образом:
{ "count": "2", "value": [ { "Id": "1", "TableName" : "Table1" }, { "Id": "2", "TableName" : "Table2" } ] }
Надеюсь это поможет.
Сделайте это - когда вы запустите отладчик, посмотрите на результат поиска. Это даст строку json, включая псевдоним для результата вашего запроса. Если это не первый ряд, вы получаете стол. Но сначала вы получите вывод, затем firstRow, а затем ваш псевдоним. Так это то, что вы указываете.
Например... если вы поместите псевдоним своего счетчика как Row_Cnt, то... @greater(activity('COUNT_RL_WK_GRBY_LOOKUP').output.firstRow.Row_Cnt,20000000)
Вам не нужна функция int. Вы пытались это сделать (как и я!), потому что он жаловался на тип данных. Это потому, что вы возвращали кучу текста json в качестве вывода вместо значения, которое вы искали. Полностью имеет смысл после того, как вы понимаете, как это работает. Но это НЕ интуитивно очевидно, потому что он возвращается с данными, но со строковым материалом из json, а не с тем значением, которое вам нужно. И такие функции, как equals, просто довольны этим. Только когда вы попытаетесь сделать что-то вроде большего, где он ищет числовое значение, он захлебнется.