Azure data factory 如何控制Azure data Factory管道中的数据故障?

Azure data factory 如何控制Azure data Factory管道中的数据故障?,azure-data-factory,Azure Data Factory,由于源数据集中的数据与目标数据集中的数据不兼容,我不时收到一个错误。我希望控制管道根据错误类型确定的操作,可能输出或删除这些微粒行,但完成所有其他操作。可能吗?此外,是否有可能从数据工厂获得实际故障线路,而无需以某种简单的方式访问和搜索实际源数据集 复制活动在接收器端遇到用户错误:ErrorCode=UserErrorInvalidDataValue,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Messag

由于源数据集中的数据与目标数据集中的数据不兼容,我不时收到一个错误。我希望控制管道根据错误类型确定的操作,可能输出或删除这些微粒行,但完成所有其他操作。可能吗?此外,是否有可能从数据工厂获得实际故障线路,而无需以某种简单的方式访问和搜索实际源数据集

复制活动在接收器端遇到用户错误:ErrorCode=UserErrorInvalidDataValue,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=列'Timestamp'包含无效值'11667'。无法将“11667”转换为类型“DateTimeOffset”,源=Microsoft.DataTransfer.Common,“类型=System.FormatException,消息=字符串未识别为有效的日期时间,源=mscorlib”


谢谢

我认为您在ADF中遇到了一个相当常见的问题和限制。尽管您使用JSON定义的数据集允许ADF理解数据的结构,也就是说,仅仅是结构,但编排工具无法作为活动处理的一部分来转换或操作数据

直接回答你的问题,这当然是可能的。但是,在将错误行传递到最终目的地之前,您需要打破C#,并使用ADF的可扩展性功能来处理错误行

我建议您扩展您的数据工厂,以包括一个自定义活动,在该活动中,您可以构建一些较低级别的清理过程来转移所描述的坏行

这是我们经常采用的方法,因为并非所有数据都是完美的(我希望如此),而且ETLELT不起作用。我更喜欢缩写词ECLT。C代表清洁。或者清理、准备等。这当然适用于ADF,因为该服务没有自己的计算或SSIS样式的数据流引擎

所以

关于如何做到这一点。首先,我建议您查看这篇关于创建ADF自定义活动的博客文章。链接:

然后在继承自
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
                }
            }
        }
  }
公共IDictionary执行(
IEnumerable LinkedService,
IEnumerable数据集,
活动,,
IActivityLogger记录器)
{
//等
使用(StreamReader vReader=新的StreamReader(您的源))
{
使用(StreamWriter vWriter=新StreamWriter(您的目的地))
{
而(!vReader.EndOfStream)
{
//数据转换逻辑(如果行不正确等)
}
}
}
}
你明白了。构建您自己的SSIS数据流

然后写出干净的行作为输出数据集,它可以作为下一个ADF活动的输入。可以使用多个管道,也可以作为单个管道中的链接活动

这是让ADF处理当前服务中的不良数据的唯一方法

希望这有帮助