我正在使用“复制数据”活动将数据从REST服务复制到Azure SQL Server。 REST服务正在返回一个分层的JSON响应,我正在使用模式映射将其推送到SQL表中。除少数名称中带有空格的属性外,此功能正常运行。这是一个模式映射示例,其最后一个属性定义了一个相关的问题:
"translator": {
"type": "TabularTranslator",
"schemaMapping": {
"id": "id",
"type": "type",
"lead_verb": "lead_verb",
"lead_action_performed": "lead_action_performed",
"created_at": "created_at",
"lead_id": "lead_id",
"selected_action": "selected_action",
"rate_type": "rate_type",
"channel_rate_id": "channel_rate_id",
"tenant_id": "tenant_id",
"unit_id": "unit_id",
"created_by_id": "created_by_id",
"source_id": "source_id",
"lead_changes_humanized.Quoted Rate[1]": "lead_changes_humanized"
},
"collectionReference": "$.lead_events"
}
这会导致以下错误:
{
"errorCode": "2200",
"message": "ErrorCode=UserErrorInvalidJsonArrayPathDefinition,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Error occurred when deserializing source JSON data. Please check whether the JsonPath in JsonNodeReference and JsonPathDefintion is valid.,Source=Microsoft.DataTransfer.Common,''Type=Newtonsoft.Json.JsonException,Message=Unexpected character while parsing path: ,Source=Newtonsoft.Json,'",
"failureType": "UserError",
"target": "cpyCompaniesLeadEvents"
}
我尝试了如下引用路径:
"lead_changes_humanized.\"Quoted Rate\"[1]": "lead_changes_humanized"
并且,用单引号引起来:
"lead_changes_humanized.'Quoted Rate'[1]": "lead_changes_humanized"
所有这些都会导致相同的错误。我已经使用路径验证器验证了JSON路径。
问题:我该如何处理空白?
答案 0 :(得分:0)
尝试过但未能跳过复制活动验证器。请考虑以下解决方法。
1。如果您可以完全控制其余api(名为A)的输出,请尝试将lead_changes_humanized.Quoted Rate[1]
返回为lead_changes_humanized.Quoted_Rate[1]
。如果不能,请创建另一个自己的其余api(名为B)。并在B rest api中调用A rest api,然后将输出作为lead_changes_humanized.Quoted_Rate[1]
处理。
2。然后您可以通过此技巧跳过验证器。如果您确实担心json键的原始格式,请执行下一步。
3。在sql db端,您可以将数据从源数据复制到临时表。并在存储过程中恢复原始格式,以便可以将原始格式存储到准确的目标表中。我在以前的案例中所做的详细步骤:Azure Data Factory mapping 2 columns in one column引用它。