Hive日期格式化可通过from_unixtime与unix_timestamp配合,或直接使用date_format函数。前者需指定输入格式,后者更简洁但要求参数为可识别日期字符串。格式符号遵循JavaSimpleDateFormat,大小写敏感,需注意MM与mm等区别,例如月份与分钟不同,常见错误源于此,需谨慎。
Hive 中处理日期格式化主要依赖几个内置函数,掌握后非常方便。很多初学者容易被各种时间戳和字符串格式搞晕,本文将系统梳理清楚这些方法。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
最常见的第一种方法是使用 from_unixtime 和 unix_timestamp 函数组合。简单来说,先将字符串转换为 Unix 时间戳(整数),再按所需格式转回字符串。
SELECT from_unixtime(unix_timestamp('2021-08-01 12:34:56', 'yyyy-MM-dd HH:mm:ss'), 'yyyy-MM-dd') as formatted_date;
上述示例将完整时间戳精简为仅日期部分。逻辑清晰:unix_timestamp 解析输入格式,from_unixtime 输出目标格式。
第二种方法更直接——使用 date_format 函数。无需中间转换,一步到位:
SELECT date_format('2021-08-01 12:34:56', 'yyyy-MM-dd') as formatted_date;
这相当于告诉 Hive 从原始字符串中提取 yyyy-MM-dd 格式的结果。虽然 date_format 调用更简洁,但要求第一个参数为 Hive 可识别的日期时间字符串,而 unix_timestamp 可以指定输入格式。实际选择取决于源数据格式是否规整。
再说说格式模式里那些符号——这是最容易踩坑的地方。Hive 沿用了 Java SimpleDateFormat 的约定,常见的包括:
yyyy:四位年份yy:两位年份MM:月份(01–12)dd:日期(01–31)HH:小时(00–23)mm:分钟(00–59)ss:秒(00–59)a:AM/PM 标识E:星期几名称(如 Sunday)u:星期几的 ISO-8601 数字(1-7,周一为1)G:ISO-8601 格式的星期几名称z:时区缩写(如 PST)打个比方,你想输出“2021-08-01 星期天”这种格式,可以这样写:
SELECT date_format('2021-08-01', 'yyyy-MM-dd E');
输出结果就是 2021-08-01 Sunday。类似的,加上 a 能区分上午下午,加上 z 能显示时区。这些符号组合起来,几乎能满足所有报表、日志、可视化对日期格式的要求。
需要注意,date_format 的第二个参数大小写敏感,写错会返回 NULL。例如 MM 表示月份,mm 表示分钟,不要混淆。另外,如果源数据是时间戳(bigint 类型),需要先进行类型转换,或直接使用 from_unixtime 处理。
更多关于 Hive 日期和时间函数的细节,可参考官方文档:Hive Date and Time Functions。实际开发中,建议创建一个小测试表,将各种边界情况(如闰年、月末、带时区)都测试一遍,即可放心使用。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述