make_timestamp:创建时间戳
速查结论
make_timestamp(year, month, day, hour, min, sec[, timezone]) 是 Spark SQL 中用于根据年月日时分秒和时区字段创建时间戳的函数。
语法
make_timestamp(year, month, day, hour, min, sec[, timezone])
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| year | INT | 要表示的年份,从 1 到 9999 |
| month | INT | 要表示的月份,从 1(一月)到 12(十二月) |
| day | INT | 要表示的月份中的天数,从 1 到 31 |
| hour | INT | 要表示的小时数,从 0 到 23 |
| min | INT | 要表示的分钟数,从 0 到 59 |
| sec | DECIMAL | 要表示的秒数和其微秒分数,从 0 到 60。该值可以是整数,如 13,或分数,如 13.123。如果 sec 参数等于 60,则秒字段设置为 0,并且在最终时间戳中增加 1 分钟 |
| timezone | STRING | 时区标识符。例如,CET,UTC 等 |
示例
> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);
2014-12-28 06:30:45.887
> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887, 'CET');
2014-12-27 21:30:45.887
> SELECT make_timestamp(2019, 6, 30, 23, 59, 60);
2019-07-01 00:00:00
> SELECT make_timestamp(2019, 6, 30, 23, 59, 1);
2019-06-30 23:59:01
> SELECT make_timestamp(null, 7, 22, 15, 30, 0);
NULL
常见报错与避坑指南
- 如果配置
spark.sql.ansi.enabled为false,输入无效时函数返回NULL;如果设置为true,则会抛出错误。 - 结果数据类型与配置值
spark.sql.timestampType一致,注意与make_timestamp_ltz和make_timestamp_ntz的区别。 sec参数为 60 时属于特殊闰秒处理,会导致分钟进位。
Since: 3.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
