无Stage的Snowflake Copy Into查询获取文件名问题求助
解决无Stage COPY INTO获取文件名的问题
在无Stage的Snowflake COPY INTO语句中,原写法的子查询嵌套会导致metadata$filename等元数据字段无法正确关联到文件源,从而获取失败。以下是修正后的正确写法及关键说明:
修正后的COPY INTO语句
copy into EMPLOYEE_SKILL( FILE_NAME_FULL_S3_PATH, LINE_NUMBER, SKILL_ID, EMP_ID, SKILL_NAME, SKILL_LEVEL ) select metadata$filename, metadata$file_row_number, $1, $2, $3, $4 from s3://test_bucket/emp/ credentials=(aws_key_id='XXXXXXXXXXXXXX' aws_secret_key='YYYYYYYYYY') file_format = (type = csv field_delimiter = '|' skip_header = 1) on_error = 'continue';
核心修正点
- 移除原语句中多余的子查询
t,直接从S3路径源中同时选择元数据字段和文件列,确保元数据与文件数据正确绑定。 metadata$filename会返回S3文件的完整路径(例如s3://test_bucket/emp/file1.csv),完全匹配FILE_NAME_FULL_S3_PATH字段的需求。metadata$file_row_number返回当前行在源文件中的行号(跳过表头后的行从1开始计数)。
排查要点(若仍有问题)
- 确认
FILE_NAME_FULL_S3_PATH字段的数据类型为VARCHAR,且长度足够容纳完整的S3文件路径。 - 验证AWS密钥对目标S3路径拥有读取权限,且路径下确实存在可读取的文件。
- 通过
COPY_HISTORY函数查看COPY INTO的执行日志,排查是否有元数据相关的错误提示。
内容的提问来源于stack exchange,提问作者Dharani S
相关产品推荐
相关产品推荐

