SpringBoot+Java实现Snowflake导出数据到S3如何覆盖已存在文件
解决方法
你只需要在COPY INTO导出语句中增加OVERWRITE = TRUE参数即可,该参数会强制Snowflake覆盖目标路径下已存在的文件,不会再触发文件已存在的报错。
修改后的SQL语句示例如下:
COPY INTO s3://snowflake/[userId] from "TEST"."PUBLIC"."USER_TABLE_TEMP" storage_integration = s3_int file_format = CSV_TEST OVERWRITE = TRUE;
对应你的Java代码调整后写法:
"COPY INTO s3://snowflake/"+ userId +" from \"TEST\".\"PUBLIC\".\"USER_TABLE_TEMP\" storage_integration = s3_int file_format = CSV_TEST OVERWRITE = TRUE;";
可选补充方案
如果你有需要留存历史导出文件的需求,也可以不在语句中加覆盖参数,改为在导出路径拼接时间戳、UUID等唯一标识,避免路径重复,示例如下:
// 路径拼接毫秒级时间戳,每次导出路径独立,不会覆盖历史文件 String exportPath = "s3://snowflake/" + userId + "/" + System.currentTimeMillis() + "/"; String copySql = "COPY INTO " + exportPath + " from \"TEST\".\"PUBLIC\".\"USER_TABLE_TEMP\" storage_integration = s3_int file_format = CSV_TEST;";
内容的提问来源于stack exchange,提问作者user9347049
相关产品推荐
相关产品推荐

