1. HIVE日期函数入门:从零开始处理时间数据
刚接触HIVE时,最让我头疼的就是处理时间数据。电商订单日期、金融交易时间戳、用户行为日志...这些时间数据就像散落的珍珠,需要我们用合适的函数串起来。今天我就把自己五年大数据开发中积累的日期处理经验,用最直白的方式分享给大家。
先说说最基础的三个函数,它们能解决80%的日常需求:
-- 获取当前日期(格式:YYYY-MM-DD)
SELECT current_date(); -- 输出:2024-03-15
-- 获取当前时间戳(格式:YYYY-MM-DD HH:MM:SS)
SELECT current_timestamp(); -- 输出:2024-03-15 14:30:45
-- 获取UNIX时间戳(1970年至今的秒数)
SELECT unix_timestamp(); -- 输出:1710505845
这三个函数有个共同特点:在同一个查询中多次调用,返回的值是相同的。比如你执行SELECT current_date(), sleep(5), current_date(),前后两个current_date()结果一致,不会因为睡了5秒就变化。
实际案例:去年双十一,我们需要统计每小时的订单量。用current_timestamp()会导致所有记录时间相同,这时应该改用服务器时间字段。这就是我踩过的坑——时间函数在ETL中的一致性很重要。
2. 日期加减的实战技巧
处理时间序列数据时,经常需要计算昨天、明天、上个月等相对日期。HIVE提供了两个神器:
-- 计算昨天和明天
SELECT
date_sub(current_date(), 1) AS yesterday, -- 2024-03-14
date_add(current_date(), 1) AS tomorrow; -- 2024-03-16
-- 更灵活的写法(支持负数)
SELECT
date_add(current_date(), -1) AS yesterday, -- 同上
date_add(current_date(), 30) AS next_month; -- 30天后的日期
金融场景应用:在做月度报表时,我常用这个技巧自动生成时间范围:
-- 自动获取上月第一天和最后一天
SELECT
add_months(trunc(current_date(), 'MM'), -1) AS last_month_first_day,
last_day(add_months(current_date(), -1)) AS last_month_last_day;
提示:date_add/sub的第二个参数可以是变量,这在动态计算时特别有用。比如
date_add(created_date, retention_days


2万+

被折叠的 条评论
为什么被折叠?



