Spark Timestamp格式时间戳如何通过SQL计算差值?
Spark SQL 时间戳差值计算方案
场景1:列为原生Timestamp存储类型
原生Timestamp类型支持直接做差值运算,如需返回指定单位的数值结果,使用TIMESTAMPDIFF函数即可:
-- 示例:计算end_ts和start_ts的差值,单位为秒 SELECT TIMESTAMPDIFF(SECOND, start_ts, end_ts) AS diff_second FROM 你的表名;
可选单位包括:MICROSECOND(微秒)、MILLISECOND(毫秒)、SECOND(秒)、MINUTE(分钟)、HOUR(小时)、DAY(天)、WEEK(周)、MONTH(月)、YEAR(年),按需替换函数第一个参数即可。
场景2:列为String存储类型
你给出的2021-08-26T11:14:08.251Z属于标准ISO 8601格式字符串,Spark SQL的to_timestamp函数可直接识别转换,无需额外指定格式模板,转换完成后再调用TIMESTAMPDIFF计算差值即可:
-- 示例:转换字符串为Timestamp后计算毫秒级差值 SELECT TIMESTAMPDIFF(MILLISECOND, to_timestamp(start_ts_str), to_timestamp(end_ts_str)) AS diff_millisecond FROM 你的表名;
类型校验方法
如果不确定列的存储类型,可运行以下查询查看表结构确认:
DESCRIBE 你的表名;
查看对应时间列的type字段,显示timestamp即为原生类型,显示string即为字符串类型。
内容的提问来源于stack exchange,提问作者DataDrivesEverything
相关产品推荐
相关产品推荐

