Azure Synapse Copy Data映射25+列时出现BadRequest错误求助
解决Azure Synapse Copy Data活动Parquet动态列映射超24列报错问题
以下是针对该问题的几种可行解决思路:
1. 源端SQL查询直接重命名列(最简便)
在SQL Server的源查询中提前将含特殊字符的列名转换为Parquet兼容格式,避免在Copy活动中做映射。示例SQL:
SELECT [Customer Name] AS Customer_Name, [Order (ID)] AS Order_ID, -- 依次处理所有95列的列名转换 * EXCEPT ([Customer Name], [Order (ID)]) -- 或逐个列出所有需要转换的列 FROM YourSourceTable
之后Copy活动启用自动映射即可,无需手动配置列映射,彻底规避列数限制问题。
2. 改用Data Flow替代Copy Data活动
Data Flow的列处理能力更灵活,无此类隐性列数限制:
- 创建Data Flow,源连接SQL Server,Sink连接ADLS Gen2的Parquet格式
- 添加派生列转换,使用表达式批量替换列名中的不兼容字符,示例表达式:
选择"批量创建派生列",将该表达式应用到所有需要转换的列replace(replace($$.name, ' ', '_'), '(', '_').replace(')', '_') - 运行Data Flow,即可正常写入所有列到Parquet文件
3. 直接编辑Copy活动的JSON配置绕过UI限制
若坚持使用Copy Data活动,尝试跳过表达式构建器的UI,直接编辑活动的JSON代码:
- 进入Copy活动的"代码"视图,找到
translator节点 - 手动添加所有列的映射规则,示例:
这种方式可以避开UI层面的列数限制bug"translator": { "type": "TabularTranslator", "columnMappings": { "Customer Name": "Customer_Name", "Order (ID)": "Order_ID", // 完整添加95列的映射关系 } }
4. 验证Parquet Sink的高级配置
确认Parquet Sink的以下配置无问题:
- 未勾选"保留源列名"(若勾选会保留原特殊字符列名,导致兼容问题)
- 文件写入模式设置正确(如"追加"或"覆盖",无冲突)
内容的提问来源于stack exchange,提问作者Lasse
相关产品推荐
相关产品推荐

