Azure数据工厂从foreach价值中获取数据

MAK*_*MAK 7 azure azure-data-factory azure-cosmosdb

我有一个查找活动,可从Blob中的容器获取值。我有一个foreach活动,它与查找活动有关

在此处输入图片说明

在设置下,其值为:

@activity('LookupMessageType').output.value
Run Code Online (Sandbox Code Playgroud)

我还有另一个在该foreach活动中运行的复制活动。它将数据从cosmos DB复制到Azure Data Lake。
在此处输入图片说明

这是源数据集中的查询:

select c.Tag, data.assetTag, data.timestamp, data.jsonVersion, data.messageType, data.speed from c join data in c.data
where (data.speed>  item().speed_Value) AND
(data.timestamp >= '@{formatDateTime(addhours(pipeline().TriggerTime, -1), 'yyyy-MM-ddTHH:mm:ssZ' )}' 
AND data.timestamp < '@{formatDateTime(pipeline().TriggerTime, 'yyyy-MM-ddTHH:mm:ssZ' )}')
Run Code Online (Sandbox Code Playgroud)

运行此管道时出现错误:

{
    "errorCode": "2200",
    "message": "Failure happened on 'Source' side. ErrorCode=UserErrorDocumentDBReadError,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=DocumentDb operation failed: Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":231,\"end\":235},\"code\":\"SC2005\",\"message\":\"'item' is not a recognized built-in function name.\"}]}\r\nActivityId: *redacted*, documentdb-dotnet-sdk/1.21.1 Host/64-bit MicrosoftWindowsNT/6.2.9200.0.,Source=Microsoft.DataTransfer.ClientLibrary.DocumentDb,''Type=Microsoft.Azure.Documents.BadRequestException,Message=Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":231,\"end\":235},\"code\":\"SC2005\",\"message\":\"'item' is not a recognized built-in function name.\"}]}\r\nActivityId: redacted, documentdb-dotnet-sdk/1.21.1 Host/64-bit MicrosoftWindowsNT/6.2.9200.0,Source=Microsoft.Azure.Documents.Client,''Type=System.Runtime.InteropServices.COMException,Message=Exception from HRESULT: 0x800A0B00,Source=,'",
    "failureType": "UserError",
    "target": "Copy Data1"
}
Run Code Online (Sandbox Code Playgroud)

这表示项目不是内置函数名称。我想使用来自foreach活动的值来查询源。

此外,这是我的动态文件路径内容

@concat('test_', item().speed, '.csv')
Run Code Online (Sandbox Code Playgroud)

如果我在查询中使用静态值,则可以通过此表达式获得所需的动态文件结构: data.speed> 500

MAK*_*MAK 10

所以,我找出了查询的问题:而不是

where (data.speed> item().speed_Value)

我不得不用

where (data.speed> @{item().speed_value})
Run Code Online (Sandbox Code Playgroud)

  • 漂亮的答案,您可以将其标记以供他人参考。 (3认同)