导入CSV至Cloud Spanner时出现日期解析错误,求解决方案
问题解决办法
问题根源
两个关键错误导致了时间解析失败:
- 生成CSV时,
TO_CHAR的格式字符串写法错误,导致输出的时间文本里混入了HH24字面字符(而非实际小时数),同时引号转义处理不当。 - 导入任务配置的
dateFormat和CSV实际输出的时间格式完全不匹配,无法完成解析。
具体修复步骤
1. 修正CSV生成命令
调整psql命令中的TO_CHAR格式字符串,处理好引号转义,确保输出正确的时间格式:
psql -h localhost -U myuser -d mydatabase -c 'Copy (SELECT id, TO_CHAR(created_at, '\''YYYY-MM-DD"T"HH24:MI:SS.MS'\'') AS created_at FROM mytable) To STDOUT With CSV DELIMITER ',';' > /mycarpet/output.csv
执行后,CSV中的时间字段会变成2024-05-30T23:16:30.892这类正确格式(不再出现HH24字样)。
2. 同步导入任务的时间格式配置
将导入任务的dateFormat修改为与CSV输出匹配的格式:
dateFormat=yyyy-MM-dd'T'HH:mm:ss.SSS
T对应时间字符串里的固定T字符HH表示24小时制小时数(替换原来的hh,hh是12小时制,与你的需求不匹配)SSS对应毫秒部分(原来的s仅表示秒数,未包含毫秒)
3. 确认目标表结构
你提供的目标表结构里只列出了created_by,但实际要导入的是created_at字段,请确认Cloud Spanner表确实存在created_at字段,且类型设置为TIMESTAMP(与源数据的时间类型匹配)。
验证步骤
重新生成CSV文件,检查时间字段格式是否正确;更新导入任务的dateFormat配置后,重新执行导入任务即可解决问题。
内容的提问来源于stack exchange,提问作者Harif Velarde
相关产品推荐
相关产品推荐

