编辑:错误来自 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
我在输入这个问题时就明白了。我的 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'