我想你已经打了ADF中一个相当普遍的问题和局限性。尽管使用JSON定义的数据集允许ADF理解数据的结构,但仅此结构,编排工具无法做任何事情来转换或操作数据作为活动处理的一部分。
要直接回答你的问题,这当然是可能的。但是您需要分解C#并使用ADF的可扩展性功能在将它传递到最终目标之前处理坏行。
我建议您扩展您的数据工厂以包含一个自定义活动,您可以在其中构建一些较低级别的清理流程来转移所描述的错误行。
这是一种方法,我们经常拿,因为不是所有的数据被完美的(我想)和ETL或ELT不起作用。我更喜欢首字母缩写词ECLT。 'C'代表干净。或者清理,准备等。这当然适用于ADF,因为此服务没有自己的计算或SSIS样式的数据流引擎。
所以...
就如何做到这一点而言。首先,我建议您查看关于创建ADF自定义活动的博客文章。链接:
https://www.purplefrogsystems.com/paul/2016/11/creating-azure-data-factory-custom-activities/
然后从IDotNetActivity
继承了你的C#类中做类似的下面。
public IDictionary<string, string> Execute(
IEnumerable<LinkedService> linkedServices,
IEnumerable<Dataset> datasets,
Activity activity,
IActivityLogger logger)
{
//etc
using (StreamReader vReader = new StreamReader(YourSource))
{
using (StreamWriter vWriter = new StreamWriter(YourDestination))
{
while (!vReader.EndOfStream)
{
//data transform logic, if bad row etc
}
}
}
}
你明白了。建立你自己的SSIS数据流!
然后将干净的行写出来作为输出数据集,它可以作为您下一次ADF活动的输入。可以使用多个管道,也可以作为单个管道中的链接活动。
这是您获得ADF处理当前服务产品中不良数据的唯一方法。
希望这会有所帮助