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