You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Synapse中合并多份不同数据类型的Parquet文件(支持参数化)

解决方案:Azure Synapse合并多架构Parquet文件

方案1:Copy Activity自动映射+类型兼容配置

  • 打开Copy Activity的「自动映射」功能,在映射设置里选「自动」,Synapse会自动识别所有源文件的字段,生成包含全部字段的目标架构
  • 针对数据类型差异,在「类型转换」里设置兼容规则:比如把不同数值类型统一为decimal(38,10),字符串类型统一为string,确保目标字段能容纳所有源字段的数据
  • 参数化运行:在源数据集里用参数指定文件路径/前缀,通过管道参数动态传入不同子项目的路径,Copy Activity会自动扫描匹配的文件并合并

方案2:Synapse SQL Pool动态处理

无服务器SQL池实现

用OPENROWSET读取所有Parquet文件,手动指定统一架构处理类型和字段差异:

SELECT
    COALESCE(col1, CAST('' AS VARCHAR(255))) AS col1,
    COALESCE(col2, CAST(0 AS BIGINT)) AS col2,
    -- 依次处理所有可能的字段,用COALESCE兼容缺失字段或类型差异
    *
FROM OPENROWSET(
    BULK 'https://yourstorageaccount.dfs.core.windows.net/container/path/*.parquet',
    FORMAT = 'PARQUET'
) AS [result]

将查询结果写入单个Parquet文件:

CREATE EXTERNAL TABLE merged_parquet
WITH (
    LOCATION = 'merged/merged_file.parquet',
    DATA_SOURCE = your_storage_source,
    FILE_FORMAT = parquet_format
)
AS SELECT * FROM (上面的查询);
  • 参数化运行:通过Synapse管道的「SQL脚本」活动,用管道参数替换文件路径,动态执行不同子项目的合并逻辑

方案3:Azure Functions自定义合并逻辑

  • 用Python/C#编写函数,遍历指定路径下的Parquet文件,借助pyarrow或Parquet.Net这类库读取每个文件的架构,动态合并成包含所有字段的统一架构
  • 处理类型兼容:将不同类型的字段转换为通用兼容类型,比如所有数值转float、日期转datetime
  • 通过Synapse管道触发函数,传入子项目路径参数,完成合并后写入目标存储

关键注意事项

  • 合并后的Parquet架构会包含所有源文件的字段,缺失字段会填充NULL,需确保目标类型能兼容所有源类型
  • 如果源文件字段名大小写敏感,要统一处理(比如全转小写),避免重复字段
  • 超大文件建议分块合并,防止内存溢出

内容的提问来源于stack exchange,提问作者user9511233

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:32:31