Hive中的时间戳转换主要涉及将不同格式的时间数据相互转换,包括:
-- 将UNIX时间戳(秒)转换为字符串格式
SELECT from_unixtime(1684139400, 'yyyy-MM-dd HH:mm:ss');
-- 输出: 2023-05-15 14:30:00
-- 将UNIX时间戳(毫秒)转换为字符串格式
SELECT from_unixtime(1684139400000/1000, 'yyyy-MM-dd HH:mm:ss');
-- 将日期时间字符串转为UNIX时间戳(秒)
SELECT unix_timestamp('2023-05-15 14:30:00', 'yyyy-MM-dd HH:mm:ss');
-- 输出: 1684139400
-- 获取当前时间的UNIX时间戳
SELECT unix_timestamp();
-- 将字符串转为TIMESTAMP类型
SELECT cast('2023-05-15 14:30:00' as timestamp);
-- 或
SELECT timestamp('2023-05-15 14:30:00');
-- 将TIMESTAMP转为UNIX时间戳(秒)
SELECT unix_timestamp(cast('2023-05-15 14:30:00' as timestamp));
-- 格式化日期时间
SELECT date_format('2023-05-15 14:30:00', 'yyyy-MM-dd');
-- 输出: 2023-05-15
SELECT date_format(current_timestamp(), 'yyyy年MM月dd日 HH时mm分ss秒');
Hive默认使用本地时区处理时间戳,可能导致转换结果与预期不符。
解决方案:
-- 设置时区为UTC
SET hive.timezone=UTC;
-- 或设置为特定时区
SET hive.timezone=Asia/Shanghai;
Hive的unix_timestamp
和from_unixtime
默认处理秒级时间戳,毫秒级需要额外处理:
-- 毫秒时间戳转日期时间
SELECT from_unixtime(1684139400123/1000, 'yyyy-MM-dd HH:mm:ss.SSS');
-- 输出: 2023-05-15 14:30:00.123
-- 日期加减
SELECT date_add('2023-05-15', 7); -- 加7天
SELECT date_sub('2023-05-15', 7); -- 减7天
-- 计算日期差
SELECT datediff('2023-05-20', '2023-05-15'); -- 输出: 5
-- 提取年、月、日等
SELECT year('2023-05-15');
SELECT month('2023-05-15');
SELECT day('2023-05-15');
SELECT hour('2023-05-15 14:30:00');
SELECT minute('2023-05-15 14:30:00');
SELECT second('2023-05-15 14:30:00');
通过掌握这些时间戳转换技巧,可以更高效地在Hive中处理各种时间相关的数据分析和处理任务。
没有搜到相关的文章