如何通过ADF+SHIR将Azure SQL中15-20MB的JSON直接发送至REST API?
问题背景
我有一个运行在自托管集成运行时(SHIR)上的Azure数据工厂(ADF)管道。我的SQL表中有一个JsonData列,存储着每个大小为15–20 MB的大型JSON对象。
需求
需要将每行的JSON对象作为原始请求体发送至REST API,期望的请求体示例如下:
{"name":"abc","value":123}
已尝试的方案
- 复制活动(SQL → REST接收器):始终会包裹列名并转义JSON,生成如下内容,不符合API要求:
{ "JsonData": "{\"name\":\"abc\",\"value\":123}" } - 查找活动+ForEach+Web活动:因Lookup/Web活动的请求体限制仅为4–5 MB而失败,我的JSON大小为15–20 MB。
- 带REST接收器的数据流:本可实现(支持将列直接映射到请求体),但数据流不支持SHIR。
- 自定义活动:ADF要求Azure Batch作为计算后端,但我的环境仅拥有ADF + SQL + SHIR(无Blob、Batch、Functions)。
核心问题
在仅使用ADF + SQL + SHIR、JSON对象大小为15–20 MB的约束下,是否有办法将原始JSON对象从SQL发送至REST API,且不进行列名包裹或转义?或者说,不部署Azure Batch/Blob/Functions的话是否无法实现?
补充说明
- 我的环境无法使用Blob存储或Azure Functions。
- API不接受转义的JSON字符串,需要原始JSON。
- API不支持分块上传,要求每次调用发送单个JSON对象。
- 我真正想确认的是:能否让SHIR上的复制活动或其他ADF活动将列值作为原始请求体原样发送?还是只能扩展环境(如添加Batch或Blob)?
回答
在当前仅ADF + SQL + SHIR的环境约束下,无法直接实现将15-20MB的原始JSON列值作为请求体发送到REST API,具体原因如下:
- 复制活动的REST接收器默认会将SQL列包装为键值对结构,且对JSON内容进行转义,没有配置项可以跳过这一步骤直接将列值作为请求体,即使在SHIR上运行也无例外。
- Web活动的请求体大小限制(4-5MB)无法满足大JSON需求,Lookup活动的结果集大小也有上限,无法承载15-20MB的单条数据。
- 数据流虽然支持直接映射列到请求体,但不支持SHIR,不符合运行环境要求。
- 自定义活动必须依赖Azure Batch作为计算资源,而你无法部署该服务。
唯一可行的路径是扩展现有环境,比如添加Azure Batch来运行自定义活动,或者后续允许的话使用Azure Functions处理大JSON的发送逻辑。如果暂时无法扩展环境,没有其他ADF原生活动能满足你的需求。
内容的提问来源于stack exchange,提问作者bubu
相关产品推荐
相关产品推荐

