如何使用ADF复制活动导入JSON数组源的所有行至SQL Server
解决ADF复制活动从JSON数组导入全量数据到SQL Server的问题
这个问题我之前帮不少人处理过——你当前的配置里硬编码了value[0].xxx,相当于只告诉ADF取数组的第一个元素,自然只会生成一条记录。要导入所有行,关键是让ADF识别到value是要遍历的数组集合,然后正确映射数组内的字段。
核心修改步骤
配置源的Collection Reference
在复制活动的源设置中,找到「Collection Reference」(针对JSON源),输入$['value'](或直接value,取决于你的JSON结构层级)。这个配置会告诉ADF:要把value数组里的每个元素当作单独的一行数据来处理。修改TabularTranslator的schemaMapping
把原来带[0]的索引去掉,直接用数组元素内的字段名映射到SQL Server的列。比如原来的value[0].AssociationFee改成AssociationFee,因为现在ADF已经在遍历value数组的每个元素了,直接引用元素内的字段即可。
修改后的完整配置示例
"enableStaging": false, "translator": { "type": "TabularTranslator", "schemaMapping": { "AssociationFee": "AssociationFee", "AssociationFeeFrequency": "AssociationFeeFrequency", "AssociationName": "AssociationName" } }
额外处理:如果需要保留顶级字段(如@odata.context)
如果你想把JSON里顶级的@odata.context和@odata.nextLink字段值复制到每一行对应的SQL列中,需要在translator里添加referenceObject配置,用来引用数组外的顶级字段:
"enableStaging": false, "translator": { "type": "TabularTranslator", "schemaMapping": { "AssociationFee": "AssociationFee", "AssociationFeeFrequency": "AssociationFeeFrequency", "AssociationName": "AssociationName", "@odata.context": "BuyerFinancing", "@odata.nextLink": "PropertyCondition" }, "referenceObject": { "@odata.context": "$['@odata.context']", "@odata.nextLink": "$['@odata.nextLink']" } }
原理说明
当你设置了Collection Reference后,ADF会自动遍历指定数组的每一个元素,将每个元素的字段与schemaMapping中的配置对应,从而把数组里的所有元素都导入到SQL Server中,而不是只取第一个。
内容的提问来源于stack exchange,提问作者Gregory Suvalian
相关产品推荐
相关产品推荐

