Azure Synapse无服务器池加载Parquet文件报Unexpected end of stream错误
问题诱因
- Parquet文件本身损坏/不完整:Parquet格式依赖文件尾部的元数据(包含Schema、块偏移量等信息)实现快速读取,若文件生成过程被中断、上传时断连未完成提交、或生成的是空文件,尾部元数据缺失就会触发该报错。
- 存储层访问限制:目标文件处于Blob归档存储层未解冻、数据源配置的访问凭据无完整文件读取权限、存储账户防火墙拦截了Synapse无服务器池的出站请求,都会导致读取流提前中断。
- Parquet格式兼容性问题:文件使用了Synapse不支持的压缩算法、非标准的Parquet格式扩展,也会导致解析流意外终止。
解决方案
优先验证文件完整性
先将目标文件下载到本地,使用Python工具验证可读性:import pandas as pd # 读失败则说明文件本身损坏 pd.read_parquet("下载的本地parquet文件路径")若文件大小为0,直接删除空文件或在查询路径中排除空文件即可。若本地读取失败,直接重新生成、重新上传Parquet文件即可解决。
检查存储层配置
- 确认目标文件的存储层为热层/冷层,若为归档层需先完成解冻操作
- 验证
my_blob_datasource配置的凭据(SAS令牌、托管身份)具备该Blob的读取、列出权限 - 检查存储账户的防火墙规则,已放行Synapse无服务器池的出站IP段
校验Parquet格式兼容性
生成Parquet文件时优先使用snappy、gzip、zstd这类Synapse原生支持的压缩算法,避免开启生成工具的自定义Parquet扩展配置,使用标准Parquet 2.0格式生成文件。查询优化
若读取大文件触发问题,可将单个大Parquet拆分为100MB~1GB大小的多个小文件提升读取稳定性;也可以在OPENROWSET中显式指定Schema,避免全量解析元数据:SELECT * FROM OPENROWSET( BULK N'/path/to/my.parquet', DATA_SOURCE='my_blob_datasource', FORMAT='PARQUET' ) WITH ( 列名1 类型1, 列名2 类型2 ) as file_alias
内容的提问来源于stack exchange,提问作者Anders Swanson
相关产品推荐
相关产品推荐

