Snowflake执行COPY INTO导入CSV报时间戳无法识别错误如何解决
报错根因
两个核心配置错误导致解析失败:
- 时间格式配置完全不匹配:你之前设置的
yyyy/mm/dd HH24:MI:SS存在三处错误:分隔符用了斜杠/,但原始时间的年月日分隔符是横杠-;格式符mm代表分钟,代表月份的正确格式符是大写MM;原始时间带3位毫秒部分.000,你配置的格式串没有覆盖这部分内容。 - CSV解析规则缺失:报错信息里时间戳外层带双引号,说明没有配置CSV字段包围符规则,Snowflake把字段外层的引号当成了时间值的一部分,进一步导致解析失败。
- 你之前通过
ALTER citibike SET修改的是数据库级参数,本身配置值错误,且会话级、COPY命令内联的配置优先级高于数据库级配置,自然不会生效。
修复方案
直接在COPY命令里内联正确的文件格式配置,绕开参数优先级问题,命令如下:
COPY INTO trips FROM @citibike_trips FILE_FORMAT = ( TYPE = CSV, TIMESTAMP_FORMAT = 'yyyy-MM-dd HH24:MI:SS.FF3', FIELD_OPTIONALLY_ENCLOSED_BY = '"', SKIP_HEADER = 1 -- 若CSV文件无表头可删除该行 );
执行前可以先跑单值解析验证格式正确性:
SELECT TO_TIMESTAMP('2013-08-19 09:50:37.000', 'yyyy-MM-dd HH24:MI:SS.FF3');
正常返回时间类型结果即代表格式串配置正确。
之前设置的错误数据库参数建议重置为默认,避免影响后续任务:
ALTER DATABASE citibike SET TIMESTAMP_INPUT_FORMAT = 'AUTO';
内容的提问来源于stack exchange,提问作者Siver R
相关产品推荐
相关产品推荐

