Azure data factory ADF V2-在prem上ADL到SQL Server,列顺序是否重要?
我一直在尝试使用纯ADL和SQL Server数据集将数据从ADLS Azure data Lake Store中的平面文件移动到Prem上的SQL Server,我认为TablerTranslator属性将有助于映射列,并忽略它们在平面文件中的顺序。做这样的事Azure data factory ADF V2-在prem上ADL到SQL Server,列顺序是否重要?,azure-data-factory,Azure Data Factory,我一直在尝试使用纯ADL和SQL Server数据集将数据从ADLS Azure data Lake Store中的平面文件移动到Prem上的SQL Server,我认为TablerTranslator属性将有助于映射列,并忽略它们在平面文件中的顺序。做这样的事 { "source": { "type": "AzureDataLakeStoreSource" }, "sink": { "type": "SqlSink", "
{
"source": {
"type": "AzureDataLakeStoreSource"
},
"sink": {
"type": "SqlSink",
"writeBatchSize": 10000
},
"enableStaging": false,
"cloudDataMovementUnits": 0,
"translator": {
"type": "TabularTranslator",
"columnMappings": "ColA: ColA, ColB:ColB"
}
}
然而,看起来顺序很重要,而且TablerTranslator可能只适用于SQL Server和Azure SQL数据库,是否有任何方法可以映射这些列而不必更改我的目标的列顺序
我得到的错误是一个截断错误,因为它试图将ColB数据插入我目标中的ColA中
更多细节
换句话说,我有以下来源和目标
来源:File.tsv
可乐瓶
代码1
法典B 2
编解码器3
目标:SQL Server表
|---------------------|------------------|
| ColB | ColB |
|---------------------|------------------|
| | |
|---------------------|------------------|
看起来来自ColA的数据试图插入ColB,然后我得到以下结果:
ErrorCode=UserErrorInvalidDataValue,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Column'ColB'包含无效值“codeA”;。无法转换“codeA”;要键入“Double”;。,Source=Microsoft.DataTransfer.Common,Type=System.FormatException,Message=Input string的格式不正确,Source=mscorlib,“不需要使用表格转换器,我只在使用Polybase将数据从ADL移动到仓库时使用过它,但我认为内部部署数据库不支持这种方法 使用数据湖作为源时,请查看文档: 在您的情况下,如果没有表格翻译,它应该可以完全正常工作
希望这有帮助 谢谢Martin,你说得对,不需要表格转换器,我在原始问题中添加了更多细节,我想我想问的是,是否有一种方法可以映射这些列,而无需在SQL中更改目标表中的列顺序,我已经改变了我的目标表的顺序,它工作了,但是有时它对用户来说不是很优雅,因为平面文件顺序可能不会让senseI看到。尽管如此,如果tsv文件中的列名称与sql server表中的列名称相同,data factory应该能够在没有它的情况下映射它们,然后顺序就无关紧要了,如图所示:同意,我希望ADF能够处理这个问题,但看起来我遗漏了什么。你能做到吗?例如,有一个包含ColA、ColB的平面文件和一个包含ColB、ColC的目标sql server表,并将数据从ADLS移动到sql Serve on Prem上,不会出现问题?不,可以在平面文件中包含ColB、ColA,在sql server表中包含ColA、ColB,并且移动数据时不会出现问题,无论顺序如何。如果名称不同,那么是的,您需要使用表格转换器将每个列从源映射到接收器,但文档中没有提到具体的顺序。我理解,但事实并非如此,我的列名是相同的,顺序很重要:所以看起来我遗漏了什么,该特定用例的文档不清楚