如何用Azure Copy Activity无显式映射复制层级JSON至ADLS Gen2并批量生成文件
解决方案:用Copy Activity处理多REST请求并生成独立Parquet文件
一、单个Copy Activity+ForEach实现多请求生成独立文件
单个Copy Activity无法直接发起多个REST请求,但结合ForEach活动循环处理请求集合,就能实现每个请求生成独立文件。以下是源端的关键配置项:
源端参数化设置
- Base URL:填写API的固定基础地址,例如
https://api.yourdomain.com/v1 - Relative URL:用动态参数指定每个请求的路径,例如
@item().requestPath(item()来自ForEach迭代的请求配置列表) - Query Parameters:如果每个请求有不同的查询参数,同样用参数化配置,比如
@item().queryParams - JSON格式配置:
- 若API返回数组结构,设置
File pattern为Array of objects;若返回单个对象,选Single object - 开启
Flatten nested structures选项,自动展平JSON嵌套层级,无需额外Data Flow处理
- 若API返回数组结构,设置
Sink端独立文件配置
在ADLS Gen2的Parquet sink中,设置动态文件名确保每个请求生成独立文件:
File name:使用表达式生成唯一名称,例如@concat('data_', item().requestId, '.parquet')- 取消勾选
Merge files,保证每个Copy Activity运行生成单个文件
二、关于JSON层级展平的说明
无需强制使用Data Flow,Copy Activity自带的Flatten nested structures功能可自动将嵌套的JSON对象/数组展平为顶级列(例如嵌套字段user.info.email会被转换为user_info_email)。如果需要自定义展平规则(比如保留特定层级、处理复杂数组),再考虑使用Data Flow的Flatten转换。
三、完整流程步骤
- 定义请求配置列表:创建管道变量或参数,存储所有需要发起的REST请求信息,示例:
[ {"requestPath": "/customers/1001", "requestId": "customer_1001"}, {"requestPath": "/orders/202405", "requestId": "orders_202405"} ] - 添加ForEach活动:将上述列表作为迭代项,可根据需求设置并行/串行执行
- ForEach内部添加Copy Activity:
- 源:配置REST数据集,绑定动态路径和参数,开启层级展平
- 映射:选择默认映射,Copy Activity会自动识别所有列并完成映射
- Sink:配置ADLS Gen2的Parquet数据集,绑定动态文件名
- 运行管道:每个迭代会独立发起REST请求,将结果保存为单独的Parquet文件
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

