Snowflake执行COPY INTO导入CSV时Timestamp格式不识别问题求助
报错根因
你遇到的时间识别报错不是字符'T'导致的,核心原因是你当前使用的fbk.fbk_insights文件格式没有适配带4位数字时区偏移的ISO 8601时间格式,Snowflake默认时间解析规则不匹配2021-09-17T07:00:00+0000这类格式。
Timestamp '2021-09-17T07:00:00+0000' is not recognized
Row 1, column "FACEBOOK_INSIGHTS"["END_TIME":8]
可选解决方案
方案1:无需修改pandas导出的CSV,直接调整Snowflake侧配置(推荐)
不需要改动上游数据导出逻辑,仅调整导入侧配置即可,有两种实现方式:
方式1:在COPY INTO语句中新增时间格式显式转换
假设你原SELECT语句中的$7对应END_TIME字段,修改后语句如下:COPY INTO fbk.fbk_insights FROM ( SELECT CURRENT_TIMESTAMP::TIMESTAMP_LTZ, METADATA$FILENAME, METADATA$FILE_ROW_NUMBER, $1, $2, $3, $4, $5, $6, TO_TIMESTAMP($7, 'YYYY-MM-DD"T"HH24:MI:SSTZHTZM') -- 按实际时间格式匹配转换 FROM @luigi.etc/FBK/insights/2021-09-19/ ) file_format = (format_name = 'fbk.fbk_insights') TRUNCATECOLUMNS = FALSE FORCE = FALSE格式串说明:
"T"匹配固定的T字符,TZHTZM匹配+0000这类4位时区偏移。方式2:修改现有文件格式的默认时间解析规则
一劳永逸适配所有同格式的文件导入,不需要修改COPY INTO语句:ALTER FILE FORMAT fbk.fbk_insights SET TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SSTZHTZM';
方案2:调整pandas侧的时间导出格式
如果需要统一所有导出文件的时间格式,避免后续跨系统适配问题,可以在导出CSV前调整时间格式:
你提供的示例df['end_time']=pd.to_datetime(df['end_time'])仅将列转换为datetime类型,导出CSV时仍会默认生成带T的ISO格式,需要额外指定输出格式:
# 方法1:保留时区信息,输出为Snowflake默认可识别的格式 df['end_time'] = pd.to_datetime(df['end_time']).dt.strftime('%Y-%m-%d %H:%M:%S %z') # 方法2:统一转为UTC时间,去掉时区偏移,适配性更强 df['end_time'] = pd.to_datetime(df['end_time']).dt.tz_convert('UTC').dt.strftime('%Y-%m-%d %H:%M:%S')
调整后再导出CSV,使用原COPY INTO语句即可直接导入。
内容的提问来源于stack exchange,提问作者KristiLuna
相关产品推荐
相关产品推荐

