我有一个21列的源.csv和一个25列的目标表。
不是源中的所有列都在目标表中都有主目录,并且目标表中的并非所有列都来自源。
我无法获取CopyData任务让我选择要映射的方式。到目前为止,使它正常工作的唯一方法是将源数据加载到具有1:1映射的“持有”表中,然后执行存储过程以将来自该表的数据插入到最终目标中。
我尝试更改源和目标上的模式以匹配,但是仍然出错,因为ACTUAL源中的列多于目标,反之亦然。
这可能不是实现此目的的最有效方法,但我对如何使其工作一无所知。
是的,我尝试了用户界面,是的,我尝试了列模式,否,我不能修改源文件,也不需要。
返回的错误代码在以下方面有所不同:
"errorCode": "2200",
"message": "ErrorCode=UserErrorInvalidColumnMappingColumnCountMismatch,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Invalid column mapping provided to copy activity: '{LONG LIST OF COLUMN MAPPING HERE}', Detailed message: Different column count between target structure and column mapping. Target column count:25, Column mapping count:16. Check column mapping in table definition.,Source=Microsoft.DataTransfer.Common,'",
"failureType": "UserError",
"target": "LoadPrimaryOwner"
答案 0 :(得分:2)
TimF。请查看此Schema mapping in copy activity中的声明:
列映射支持映射源中的全部或部分列 数据集“结构”到接收器数据集“结构”中的所有列。
以下是导致异常的错误条件:
1。源数据存储区查询结果没有在输入数据集“结构”部分中指定的列名。
2.sink数据存储(如果具有预定义的架构)没有在输出数据集“结构”部分中指定的列名。
3。接收器数据集的“结构”中的列少于或多于映射中指定的列。
4。重复的映射。
因此,您可能知道接收器数据集中的所有列都需要映射。由于您无法更改目的地,因此不必在不受支持的功能中苦苦挣扎。
当然,您可以使用描述中提到的stored procedure
。这是一个完美的解决方法,并且也不是很麻烦。关于使用细节,您可以参考我以前的案例:
1。Azure Data Factory activity copy: Evaluate column in sink table with @pipeline().TriggerTime
此外,如果您真的不想避免上述解决方案,则可以向ADF团队提交有关所需功能的feedback。