You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Redshift卸载数据到S3时丢失毫秒精度的解决方法

Redshift UNLOAD 保留Datetime类型3位毫秒精度的解决方案

当你用Redshift的UNLOAD命令导出数据到S3时,默认的datetime输出会自动截断毫秒部分末尾的零,导致原本3位精度的时间数据丢失格式一致性。要解决这个问题,核心是显式格式化timestamp列,强制保留三位毫秒精度。

具体修改方法

修改UNLOAD语句中的SELECT子查询,对每个datetime类型的列使用TO_CHAR函数,指定包含固定三位毫秒的格式字符串:'YYYY-MM-DD HH24:MI:SS.FFF'。

修改后的完整UNLOAD命令如下:

UNLOAD ('SELECT "integer", TO_CHAR("timestamp", ''YYYY-MM-DD HH24:MI:SS.FFF''), TO_CHAR("timestamp22", ''YYYY-MM-DD HH24:MI:SS.FFF'') FROM "test_db"."test_table"') 
TO 's3://bucket/location' 
ENCRYPTED 
ACCESS_KEY_ID '<redacted>' 
SECRET_ACCESS_KEY '<redacted>' 
ESCAPE 
ADDQUOTES 
MANIFEST 
DELIMITER AS ','

效果说明

执行上述命令后,S3中的导出数据会完整保留三位毫秒精度,示例数据会变为:

"1", "2023-11-24 12:30:35.123", "2023-11-24 12:30:25.000"
"2", "2023-11-24 12:30:35.120", "2023-11-24 12:30:25.200"

补充说明

如果后续需要将S3中的数据重新加载回Redshift,可以使用TO_TIMESTAMP函数将格式化后的字符串转回timestamp类型,示例加载语句片段:

SELECT "integer", TO_TIMESTAMP(timestamp_str, 'YYYY-MM-DD HH24:MI:SS.FFF') AS "timestamp", TO_TIMESTAMP(timestamp22_str, 'YYYY-MM-DD HH24:MI:SS.FFF') AS "timestamp22"
FROM ...

内容的提问来源于stack exchange,提问作者otaku_weeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:57:25