从 hive 中的日期字段中减去 n 个月
Posted
技术标签:
【中文标题】从 hive 中的日期字段中减去 n 个月【英文标题】:Subtract n months from a date field in hive 【发布时间】:2018-06-29 22:02:57 【问题描述】:我正在尝试将表限制为特定的月数,例如在我的 WHERE 子句中为 24。我使用以下方法没有成功:
其中月份(EVENT_START_DT_TM) > add_months(from_unixtime(unix_timestamp()),-1)
EVENT_START_DT_TM 是一个真正的日期时间字段,我希望从当前日期开始有 24 个月的回溯期与该字段匹配。看HIVE手册,很多日期函数都需要日期字符串,但是什么是真正的DATE字段呢?
【问题讨论】:
【参考方案1】:使用 Current_date() 和 add_months() 函数获取 24 个月之前的日期,然后使用 date_format() 函数将格式更改为根据您的需要(匹配到 EVENT_START_DT_TM 字段格式)
hive> select date_format(add_months(current_date(),-24),"yyyy-MM-dd HH:mm:ss.SSS");
+--------------------------+--+
| _c0 |
+--------------------------+--+
| 2016-06-29 00:00:00.000 |
+--------------------------+--+
真正的日期字段是当您的日期字段中的数据与 yyyy-MM-dd 格式匹配时,您可以从该字段中提取月份
hive> select month("2018-10-12");
+------+--+
| _c0 |
+------+--+
| 10 |
+------+--+
如果字段值不是真实的日期字段,即不是 yyyy-MM-dd 格式
hive> select month("20181012");
+-------+--+
| _c0 |
+-------+--+
| NULL |
+-------+--+
我们不能使用months函数直接提取月份,而是需要更改字段的格式,然后使用from_unixtime/unix_timestamp..etc函数(或)使用子字符串函数提取月份
【讨论】:
以上是关于从 hive 中的日期字段中减去 n 个月的主要内容,如果未能解决你的问题,请参考以下文章