AWS Glue Job:将十进制时间值转为mm-dd-yyyy日期格式
解决AWS Glue Job导出current_timestamp到S3后显示为科学计数法的问题
问题根源
你看到的科学计数法数值,是Glue将current_timestamp()生成的Timestamp类型序列化为微秒级时间戳数值导致的,S3 Select读取时直接解析了这个数值而非日期类型。
两种解决方案
方案1:在Glue SQL中直接格式化日期(推荐)
不需要保留Timestamp类型的话,直接用Glue SQL的date_format函数将时间戳转成你需要的MM-dd-yyyy字符串格式,导出后S3 Select读取就是正常日期格式:
SELECT -- 其他字段 date_format(current_timestamp(), 'MM-dd-yyyy') AS load_Date FROM your_source_table
注意:
MM代表两位月份(01-12),dd代表两位日期(01-31),yyyy代表四位年份,不要和小写的mm(分钟)混淆。
方案2:保留Timestamp类型并在S3 Select中转换
如果必须保留原始Timestamp的数值存储格式,可在S3 Select查询时将科学计数法的时间戳数值转换为日期:
先将科学计数法数值转为微秒级整数,再转换为Timestamp,最后格式化:
SELECT -- 其他字段 date_format( date_add('1970-01-01', cast(load_Date / 1000000 AS BIGINT)), 'MM-dd-yyyy' ) AS load_Date FROM s3object s
解释:Glue默认将Timestamp序列化为从1970-01-01开始的微秒数,所以需要除以1000000转成秒数,再用
date_add得到日期,最后格式化。
另外,如果你的Glue Job输出是Parquet格式,建议检查Job的输出配置,确保Timestamp类型被正确序列化——Parquet格式本身会保留类型信息,S3 Select可以直接识别为日期类型。
内容的提问来源于stack exchange,提问作者T Dang
相关产品推荐
相关产品推荐

