Azure数据工厂从查询中获取“针对每个”组件的数据

时间:2018-07-31 08:18:13

标签: foreach parameters azure-data-factory

情况如下:我的数据库中有一个表,每天接收约3​​00万行。我们希望定期对此表进行存档,以便表中只有最近的8周。其余数据可以存档到AZure Data湖中。 我已经每天一次找到解决方法。但是现在我想在表的前7天中每周运行此管道。我假设我应该使用“对于每个”组件执行此操作。它应该沿我要备份的数据集中存在的七个不同日期发送信号。该数据集已从源表直接复制到存档表。 使用SQL查询获取不同的日期并不难,但是如何将查询的结果获取到用于“ For Each”组件的数组中?

3 个答案:

答案 0 :(得分:2)

这个问题得到了同事的解决。 我们要做的是为接收器的数据集分配一个参数。命名方式无关紧要,也不必为其分配值。但让我们假设此参数称为“日期” 之后,可以通过使用“ @dataset()。Date”在接收器的文件名(也在数据集中)中使用此参数。 之后,返回到复制活动,并在接收器中将数据集属性分配给@item()。DateSelect。 (DateSelect是传递给For Each活动的数组中的字段名称)

另请参阅博希亚的答案作为答案的一部分

这样,它可以完美工作。可惜的是,没有得到很好的记录

答案 1 :(得分:0)

您可以使用lookup activity来获取列的内容,输出将类似于

{
"count": "2",
"value": [
    {
        "Id": "1",
        "TableName" : "Table1"
    },
    {
        "Id": "2",
        "TableName" : "Table2"
    }
]
}

然后,您可以使用@activity('MyLookupActivity')。output.value

模式,将值数组传递到Foreach活动项目字段。

参考文档:Use the Lookup activity result in a subsequent activity

答案 2 :(得分:0)

我将此作为答案发布,因为该错误不适合注释:D

已经看到了实现此目的的另一种选择。那就是从另一个管道执行一个管道。这样,我可以在第二个管道中将我应该迭代的日期定义为参数(docs.microsoft.com/en-us/azure/data-factory/…)。但是不幸的是,这导致了与仅使用foreach参数时相同的结果。因为我必须在数据湖文件的文件名中使用@@ item()。columname}。我可以在监视视图中看到在迭代步骤中传递了正确的值,但是我一直遇到错误:

{     “ errorCode”:“ 2200”,     “ message”:“失败发生在'接收器'侧。ErrorCode = UserErrorFailedFileOperation,'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message =对'Unknown'的请求失败,状态码为'BadRequest',请求ID为。{\“错误\”:{\“代码\”:\“ BadRequest \”,\“消息\”:\“从客户端(:)检测到潜在的危险Request.Path值。跟踪:cf3b4c3f-1681-4073-b225-17e1c07ec76d时间:2018-08-02T05:16:13.2141897-07:00 \“}},Source = Microsoft.DataTransfer.ClientLibrary,''Type = System.Net.WebException,Message =远程服务器返回错误:(400)错误的请求。,源=系统,“”,     “ failureType”:“ UserError”,     “ target”:“ CopyDancerDatatoADL” }