【问题标题】:Convert Row Count to INT in Azure Data Factory在 Azure 数据工厂中将行数转换为 INT
【发布时间】:2020-04-06 19:48:59
【问题描述】:

我正在尝试使用查找活动来返回行数。我能够做到这一点,但是一旦我这样做了,我想对它运行一个 If 语句,如果计数返回的行数超过 20MIL,我想执行一个额外的管道以进行进一步的表操作。但是,问题是我无法将返回的值与静态整数进行比较。以下是我对此 If 语句的当前动态表达式:

@greater(int(活动('COUNT_RL_WK_GRBY_LOOKUP').output),20000000)

当被触发时,会返回以下错误: { "errorCode": "无效模板", "message": "函数 'int' 被调用的参数无效。该值无法转换为目标类型", "failureType": "用户错误", “目标”:“如果条件1”, “细节”: ”” }

是否可以将此返回值转换为整数以便进行比较?如果没有,是否有可能的解决方法来达到我想要的结果?

【问题讨论】:

    标签: azure-data-factory dynamic-expression


    【解决方案1】:

    看来问题出在您的动态表达式上。请更正如下所示的动态表达式,然后重试。

    • 如果 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时,输出格式如下代码所示。计数字段指示返回的记录数。详细值显示在固定值数组下。在这种情况下,Lookup 活动之后是 Foreach 活动。您可以使用@activity('MyLookupActivity').output.value 模式将值数组传递给ForEach 活动项字段。要访问值数组中的元素,请使用以下语法:@{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"
            }
        ]
    }
    

    希望这会有所帮助。

    【讨论】:

    • 当您在动态表达式中包含“propertyname”时,您指的是什么?我也不确定在哪里实现“@{activity('MyLookupActivity').output.firstRow.TableName}”表达式以及在哪里拉“TableName”
    【解决方案2】:

    执行此操作 - 当您运行调试器时,请查看查找的输出。它将给出一个 json 字符串,包括查询结果的别名。如果它不是 firstrow 设置,那么你会得到一张桌子。但首先你会得到输出,然后是 firstRow,然后是你的别名。这就是您指定的内容。

    例如...如果您将计数的别名设置为 Row_Cnt 然后... @greater(activity('COUNT_RL_WK_GRBY_LOOKUP').output.firstRow.Row_Cnt,20000000)

    您不需要 int 函数。你试图这样做(就像我一样!)因为它抱怨数据类型。那是因为您返回的是一堆 json 文本作为输出,而不是您所追求的值。在你意识到它是如何工作的之后就完全有意义了。但这并不直观,因为它返回的是数据,而是来自 json 的字符串内容,而不是您所追求的值。像 equals 这样的函数对此很满意。直到您尝试执行类似更大的操作,它才会在查找数值时阻塞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-17
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多