Azure Data Factory中Mongo Atlas嵌套JSON到Azure SQL托管实例映射方案咨询
嵌套JSON(Mongo Atlas到Azure SQL托管实例)无键标量子数组映射方案
方案1:源端Mongo聚合查询提前展平(推荐)
直接在Mongo Atlas的源查询阶段使用聚合操作拆分嵌套数组,无需后续额外处理:
[ // 先拆分父数组 {"$unwind": "$parentarray"}, // 拆分无键标量子数组childarray2,生成单值行 {"$unwind": "$parentarray.childarray2"}, // 投影输出需要的字段,保留父级关联ID { "$project": { "_id": 1, "parent_field1": "$parentarray.field1", "childarray2_val": "$parentarray.childarray2" } } ]
将上述聚合语句填入ADF/Synapse复制活动的Mongo源查询配置中,输出的数据集已经是扁平化结构,可直接映射到SQL表的对应列。
方案2:ADF/Synapse复制活动映射配置
如果不修改源查询,可在复制活动的映射页面完成配置:
- 先勾选高级编辑器,找到父数组的集合引用路径,设置为交叉应用(Cross Apply)拆分为多行
- 对于无键标量子数组
childarray2,添加新的集合引用,路径填写父数组路径下的childarray2,再次设置交叉应用 - 将子数组的
$(标量值本身)映射到SQL表的对应值列,同时保留父级主键/外键字段完成关联
注:无键标量数组的单个值不需要指定键名,直接引用根路径
$即可获取数组元素本身,不会出现整段数组字符串的输出。
方案3:SQL端后置处理
如果已经使用「Map complex values to string」生成了数组格式的字符串列,可直接在Azure SQL托管实例中用OPENJSON拆分:
SELECT t.id, t.parent_field1, j.value AS childarray2_val FROM 你的原始表 t CROSS APPLY OPENJSON(t.childarray2_str) j
执行上述查询即可将["ABC", "PQR"]格式的字符串拆分为多行单个值,直接写入目标表即可匹配预期输出。
内容的提问来源于stack exchange,提问作者Prathamesh
相关产品推荐
相关产品推荐

