如何在Synapse专用SQL池中使用COPY命令加载Parquet格式文件
Synapse专用SQL池COPY命令加载Parquet文件配置方案
以下方案仅适用于Synapse专用SQL池,无需依赖Spark集群或无服务器SQL池能力:
- 首先配置合法的存储访问认证,两种方案二选一即可:
- 托管身份认证:给专用SQL池的系统托管身份分配对应存储账户的存储Blob数据参与者权限,COPY语句中指定
IDENTITY = 'Managed Identity'参数 - SAS令牌认证:生成存储容器的SAS令牌,COPY语句中指定
IDENTITY = 'SAS Token', SECRET = '你的SAS令牌字符串'参数
- 托管身份认证:给专用SQL池的系统托管身份分配对应存储账户的存储Blob数据参与者权限,COPY语句中指定
- 必须在COPY命令中明确指定Parquet格式参数,这是和CSV、普通gzip文件加载的核心差异,参考示例语句:
COPY INTO 你的目标表名 FROM 'https://<存储账户名>.dfs.core.windows.net/<容器名>/<Parquet文件路径>/*.parquet' WITH ( FILE_TYPE = 'PARQUET', IDENTITY = 'Managed Identity', -- 用SAS认证的话替换为对应参数 AUTO_CREATE_TABLE = 'OFF' -- 如需自动建表可调整为ON,建议提前建好表对齐字段类型 );
- 常见问题规避:
- 字段类型必须对齐:Parquet的字段类型和SQL表字段类型要一一匹配,比如Parquet的INT64对应SQL的BIGINT、INT32对应INT,类型不兼容会直接加载失败
- 列名大小写匹配:Parquet本身区分大小写,专用SQL池默认不区分大小写,如有大小写差异可以在COPY参数中添加
FIELD_QUOTE = '"',或者提前统一两端列名大小写 - 复杂类型处理:COPY命令暂不支持直接加载Parquet中的嵌套结构体、数组等复杂类型,需提前将复杂类型打平后导出Parquet,或将复杂类型序列化为JSON字符串存入SQL表的
NVARCHAR(MAX)字段 - 压缩格式无需额外配置:Parquet常用的SNAPPY、GZIP压缩格式专用SQL池可自动识别,不需要额外加压缩相关参数
- 错误排查:加载失败时可直接查询系统视图
sys.dm_pdw_errors获取具体错误信息,快速定位是权限、格式还是类型匹配问题
内容的提问来源于stack exchange,提问作者SLL
相关产品推荐
相关产品推荐

