Snowflake COPY FILES命令执行耗时久且未实际复制文件
Snowflake COPY FILES 执行成功但文件未复制问题
问题详情
- 执行以下SQL脚本,意图将归档目录的文件移回stage根目录(实现“取消归档”):
COPY FILES INTO @az_uksdistrib/ FROM @az_uksdistrib/Archived FILES = ('RFPT.9439.005589.DAT')
- 单个文件执行耗时约1分钟,查询显示执行成功,但目标目录未出现该文件;循环处理多文件时,每个文件同样耗时约1分钟,仍无文件复制成功。
@az_uksdistrib/Archived目录下存在约10万个小于5MB的小型DAT文件,怀疑此情况导致问题,但执行过程未出现超时错误。- 已设置
DETAILED_OUTPUT = TRUE重新执行查询,结果面板仅显示查询未产生结果。
排查与解决建议
校验路径与文件匹配
- 确认
@az_uksdistrib/Archived下的目标文件路径完全匹配,注意Snowflake stage路径默认区分大小写。 - 尝试用通配符缩小范围测试,比如
FILES = ('RFPT*.DAT'),验证是否能匹配到目标文件。
- 确认
检查权限与存储集成
- 确认执行语句的角色拥有
@az_uksdistrib的WRITE权限,以及@az_uksdistrib/Archived的READ权限。 - 检查对应存储集成的配置是否正常,确保Snowflake能正常读写底层存储(如Azure Blob Storage)。
- 确认执行语句的角色拥有
优化大量小文件的处理方式
- 批量处理多个文件,比如一次指定多个文件名(
FILES = ('file1.DAT', 'file2.DAT', ...)),减少单文件操作的重复目录扫描开销。 - 先将小文件合并为大文件再移动:用
COPY INTO把Archived目录的小文件加载到临时表,再通过UNLOAD导出为大文件到目标stage根目录,降低目录扫描压力。
- 批量处理多个文件,比如一次指定多个文件名(
深挖操作日志
- 查看底层存储的操作记录(如Azure Portal中的Blob Storage日志),确认是否存在存储层的权限拦截或操作失败记录。
- 在Snowflake的Query History中找到该语句的详细日志,排查是否有隐藏的错误信息(即使查询显示成功,底层存储操作可能未完成)。
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

