Azure Data Factory中复制数据时,如何实现MySQL到CosmosDB的Schema转换?
在Azure Data Factory中实现MySQL到CosmosDB for MongoDB的Schema转换
复制活动的基础字段映射仅支持简单的一对一关联,无法直接构造嵌套对象和地理坐标数组,你可以通过以下两种方式实现需求,无需创建独立管道,在现有管道内即可完成:
方法一:使用数据流动(Data Flow)处理复杂转换
数据流动是ADF专门用于复杂数据转换的组件,适合这种需要构造嵌套结构的场景:
- 配置源数据集:在数据流动中创建MySQL源数据集,关联到
inventory_warehouse_table。 - 添加派生列转换:插入派生列转换,生成
geo_coordinates字段:- 派生列名称:
geo_coordinates - 表达式:
该表达式会将struct( type = "Point", coordinates = array(lat, long) )lat和long字段组合为目标所需的嵌套地理结构。
- 派生列名称:
- 清理冗余字段:添加选择转换,只保留
id、warehouse_name、warehouse_address和新生成的geo_coordinates字段。 - 配置目标数据集:创建CosmosDB for MongoDB目标数据集,指向
inventory_warehouse_collection,并设置合适的写入策略(如插入或更新)。 - 集成到管道:在原管道中添加「执行数据流动」活动,调用上述配置好的数据流动,替代原复制活动即可。
方法二:在复制活动中使用自定义映射表达式(轻量方案)
若无需复杂转换逻辑,可直接在复制活动的映射中通过表达式构造嵌套结构:
- 配置复制活动的源(MySQL表)和目标(CosmosDB集合)数据集。
- 进入「映射」选项卡,导入源和目标的Schema。
- 针对目标的
geo_coordinates字段,点击源列下拉框选择「添加动态内容」,输入以下表达式:{ "type": "Point", "coordinates": [@item().lat, @item().long] } - 手动移除源表中
lat和long字段的映射,避免写入冗余数据;其余字段保持一对一映射即可。
方案对比
- 数据流动支持转换逻辑调试、数据预览,适合复杂或后续可能扩展的转换场景;
- 复制活动的表达式方式更轻量,配置更快,仅适用于简单的嵌套构造需求。
内容的提问来源于stack exchange,提问作者Aritra Sur Roy
相关产品推荐
相关产品推荐

