Hive DateTime 截断器(QUARTER、WEEK、DAYOFWEEK)?
Hive DateTime Truncators (QUARTER, WEEK, DAYOFWEEK)?
是否有任何表达式可以获取 Hive (v0.14.1) 中 DateTime 字段的 QUARTER
、WEEK
和 DAYOFWEEK
,这些表达式与 MySql?
这是我想要的规范(来自 MySql 文档):
注意:
1.函数quarter()是在Hive 1.3中引入的,但是我需要一个expr来支持低版本。
2. 支持weekofyear() 函数而不是week(),但有一点不同。不过没关系,就忽略这个吧
在https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF处,您可以找到'Date Functions'。你会在那里找到 'Quarter' 和 'Week'。
对于星期几,您可以使用如下内容:
CASE
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Monday' THEN 1
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Tuesday' THEN 2
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Wednesday' THEN 3
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Thursday' THEN 4
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Friday' THEN 5
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Saturday' THEN 6
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Sunday' THEN 7
END AS day_of_week
假设日期时间字段是order_time
- 星期几:
PMOD(DATEDIFF(order_time, '2012-01-01'), 7)
- 周:
WEEKOFYEAR(order_time)
- 季度(配置单元 <1.3):
(INT((MONTH(order_time)-1)/3)+1)
- 季度(配置单元 >=1.3):
QUARTER(order_time)
知道如何仅使用数学将一个月变成一个季度总是有帮助的:
floor((cast(substr(visit_date, 6,2) as int) - 1) / 3) + 1
要获得 QUARTER for Hive < 1.3.0 使用 ceil(month(order_time) / 3.0)
和 quarter(order_time)
for Hive >= 1.3.0
星期几使用 date_format('2016-12-01' ,'u')
和 WEEKOFYEAR(order_time)
表示一年中的周数
是否有任何表达式可以获取 Hive (v0.14.1) 中 DateTime 字段的 QUARTER
、WEEK
和 DAYOFWEEK
,这些表达式与 MySql?
这是我想要的规范(来自 MySql 文档):
注意: 1.函数quarter()是在Hive 1.3中引入的,但是我需要一个expr来支持低版本。 2. 支持weekofyear() 函数而不是week(),但有一点不同。不过没关系,就忽略这个吧
在https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF处,您可以找到'Date Functions'。你会在那里找到 'Quarter' 和 'Week'。
对于星期几,您可以使用如下内容:
CASE
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Monday' THEN 1
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Tuesday' THEN 2
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Wednesday' THEN 3
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Thursday' THEN 4
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Friday' THEN 5
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Saturday' THEN 6
WHEN from_unixtime(unix_timestamp("2012-10-12 20:53:12"), 'EEEE') = 'Sunday' THEN 7
END AS day_of_week
假设日期时间字段是order_time
- 星期几:
PMOD(DATEDIFF(order_time, '2012-01-01'), 7)
- 周:
WEEKOFYEAR(order_time)
- 季度(配置单元 <1.3):
(INT((MONTH(order_time)-1)/3)+1)
- 季度(配置单元 >=1.3):
QUARTER(order_time)
知道如何仅使用数学将一个月变成一个季度总是有帮助的:
floor((cast(substr(visit_date, 6,2) as int) - 1) / 3) + 1
要获得 QUARTER for Hive < 1.3.0 使用 ceil(month(order_time) / 3.0)
和 quarter(order_time)
for Hive >= 1.3.0
星期几使用 date_format('2016-12-01' ,'u')
和 WEEKOFYEAR(order_time)
表示一年中的周数