将 Spark parquet 文件从 Snowflake-S3-Stage 上传到 Snowflake 表时出错

问题描述 投票:0回答:1

编辑:错误来自 Spark 的

_SUCCESS
文件。仅在 SQL 查询中包含 parquet 文件:
pattern = '.*parquet'

原文:

Snowflake 可以加载我的多部分镶木地板文件吗?我还有其他在同一技术堆栈中工作的插入,但它们都使用单个镶木地板文件。我想知道数据是否在幕后被分区或者以其他方式变得无法被 Snowflake 识别

这是我的简化查询

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

尝试将 S3 中的数据复制到 Snowflake 表时出现此错误:

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

如果有帮助,生成镶木地板文件的命令如下所示:

spark_dataframe.select("date", "cityid", "prediction")
        .write.mode("overwrite")
        .parquet(predictions_path)

还有 parquet 文件的示例(快速压缩 - 雪花默认值)

_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
python apache-spark snowflake-cloud-data-platform parquet
1个回答
0
投票

我在输入这个问题时就明白了。我的 parquet 文件列表中有

_SUCCESS
,这是来自 Spark 的零大小文件。此文件导致
Parquet file size is 0
错误。

为了解决此问题,我在查询中添加了

pattern = '.*parquet'
以忽略该文件,如下所示:

COPY INTO database.schema.table
FROM (
    SELECT $1 
    FROM @database.schema.stage/path_to_parquet
)
file_format = (type = parquet)
pattern = '.*parquet'
© www.soinside.com 2019 - 2024. All rights reserved.