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

Spark生成的多段Parquet文件Snowflake加载失败问题排查与解决

Snowflake加载Spark生成的多段Parquet文件报错解决

问题场景

使用Spark生成多段Parquet文件后,通过Snowflake的COPY INTO命令从S3加载数据时触发以下错误:

snowflake.connector.errors.ProgrammingError: 100152 (22000):
Error parsing the parquet file:
Invalid:
Parquet file size is 0 bytes
Row 0 starts at line 0, column

此前使用单段Parquet文件时加载正常,怀疑是多段文件的识别问题。

相关代码与文件信息

  • 生成Parquet的Spark代码:
spark_dataframe.select("date", "cityid", "prediction")
        .write.mode("overwrite")
        .parquet(predictions_path)
  • 生成的文件列表(采用snappy压缩):
_SUCCESS
part-00000-75a71af4-e797-417a-a2f1-1c31cf9dc891-c000.snappy.parquet
part-00001-75a71af4-e797-417a-a2f1-1c31cf9dc891-c000.snappy.parquet
part-00002-75a71af4-e797-417a-a2f1-1c31cf9dc891-c000.snappy.parquet
part-00003-75a71af4-e797-417a-a2f1-1c31cf9dc891-c000.snappy.parquet
part-00004-75a71af4-e797-417a-a2f1-1c31cf9dc891-c000.snappy.parquet
  • 原加载SQL:
COPY INTO database.schema.table
FROM (
    SELECT $1 
    FROM @database.schema.stage/path_to_parquet
)
file_format = (type = parquet)

错误原因

报错根源是Spark生成的_SUCCESS文件——这是一个0字节的空文件,并非标准Parquet格式,但Snowflake默认会遍历加载路径下的所有文件,尝试解析该文件时就会触发「文件大小为0字节」的错误。

解决方法

在COPY INTO语句中添加pattern = '.*parquet'参数,限定只加载后缀为parquet的文件,自动跳过_SUCCESS这类非Parquet文件。

修改后的SQL代码

COPY INTO database.schema.table
FROM (
    SELECT $1 
    FROM @database.schema.stage/path_to_parquet
)
file_format = (type = parquet)
pattern = '.*parquet'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:05:15