Azure data factory 如何控制Azure data Factory管道中的数据故障?
由于源数据集中的数据与目标数据集中的数据不兼容,我不时收到一个错误。我希望控制管道根据错误类型确定的操作,可能输出或删除这些微粒行,但完成所有其他操作。可能吗?此外,是否有可能从数据工厂获得实际故障线路,而无需以某种简单的方式访问和搜索实际源数据集 复制活动在接收器端遇到用户错误:ErrorCode=UserErrorInvalidDataValue,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=列'Timestamp'包含无效值'11667'。无法将“11667”转换为类型“DateTimeOffset”,源=Microsoft.DataTransfer.Common,“类型=System.FormatException,消息=字符串未识别为有效的日期时间,源=mscorlib”Azure data factory 如何控制Azure data Factory管道中的数据故障?,azure-data-factory,Azure Data Factory,由于源数据集中的数据与目标数据集中的数据不兼容,我不时收到一个错误。我希望控制管道根据错误类型确定的操作,可能输出或删除这些微粒行,但完成所有其他操作。可能吗?此外,是否有可能从数据工厂获得实际故障线路,而无需以某种简单的方式访问和搜索实际源数据集 复制活动在接收器端遇到用户错误:ErrorCode=UserErrorInvalidDataValue,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Messag
谢谢我认为您在ADF中遇到了一个相当常见的问题和限制。尽管您使用JSON定义的数据集允许ADF理解数据的结构,也就是说,仅仅是结构,但编排工具无法作为活动处理的一部分来转换或操作数据 直接回答你的问题,这当然是可能的。但是,在将错误行传递到最终目的地之前,您需要打破C#,并使用ADF的可扩展性功能来处理错误行 我建议您扩展您的数据工厂,以包括一个自定义活动,在该活动中,您可以构建一些较低级别的清理过程来转移所描述的坏行 这是我们经常采用的方法,因为并非所有数据都是完美的(我希望如此),而且ETL或ELT不起作用。我更喜欢缩写词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处理当前服务中的不良数据的唯一方法
希望这有帮助