Snowflake将Stage中CSV导入表无报错,但0条数据加载成功,求排查
解决Snowflake COPY命令无报错但加载0条数据的问题
以下是针对该问题的排查和解决步骤:
1. 修复分隔符的引号格式
你的文件格式定义和COPY命令中,分隔符使用的是中文单引号(‘|#|’、‘|*|’),Snowflake仅识别英文单引号,这会导致分隔符不匹配,无法正确解析数据。将所有中文引号替换为英文单引号:
修改后的文件格式脚本:
Create or Replace FILE FORMAT csv_format TYPE = CSV FIELD_DELIMITER = '|#|' SKIP_HEADER = 1 NULL_IF = () RECORD_DELIMITER = '|*|' EMPTY_FIELD_AS_NULL = FALSE Compression = none;
修改后的COPY脚本:
COPY INTO DEVELOPMENT.MY_TABLE FROM @MYTestStage FILE_FORMAT = (FORMAT_NAME = csv_format TYPE = CSV RECORD_DELIMITER = '|*|' FIELD_DELIMITER = '|#|' SKIP_HEADER = 1) FORCE = TRUE;
2. 验证文件格式与实际内容匹配
确认CSV文件中的字段分隔符确实是|#|、记录分隔符确实是|*|。可以通过以下SQL预览文件内容,检查是否能正确拆分字段和行:
SELECT $1, $2, $3 FROM @MYTestStage/Source_File_1.csv (FILE_FORMAT => csv_format);
如果预览结果显示所有内容集中在一个字段里,说明分隔符设置和实际文件不匹配,需要调整为文件真实使用的分隔符。
3. 检查表头跳过设置
如果你的CSV文件没有表头行,SKIP_HEADER = 1会跳过第一行数据,若文件只有一行则会导致0条加载。可以临时将SKIP_HEADER改为0,重新执行COPY命令测试是否有数据加载,再根据实际情况调整。
4. 查看COPY操作的详细日志
执行COPY命令后,通过以下SQL查询复制历史,获取文件处理的详细信息(比如解析行数、过滤行数、错误原因):
SELECT * FROM TABLE(INFORMATION_SCHEMA.COPY_HISTORY( TABLE_NAME => 'DEVELOPMENT.MY_TABLE', START_TIME => DATEADD('hour', -1, CURRENT_TIMESTAMP()) ));
日志中的ROWS_PARSED、ROWS_LOADED、ERROR_MESSAGE字段会明确说明问题所在。
5. 确认文件路径与加载范围
虽然LIST命令显示文件存在,但可以尝试指定单个文件路径测试,排除路径匹配问题:
COPY INTO DEVELOPMENT.MY_TABLE FROM @MYTestStage/Source_File_1.csv FILE_FORMAT = (FORMAT_NAME = csv_format) FORCE = TRUE;
内容的提问来源于stack exchange,提问作者ipeoples
相关产品推荐
相关产品推荐

