Hive DateTime 截断器(QUARTER、WEEK、DAYOFWEEK)?

Hive DateTime Truncators (QUARTER, WEEK, DAYOFWEEK)?

是否有任何表达式可以获取 Hive (v0.14.1) 中 DateTime 字段的 QUARTERWEEKDAYOFWEEK,这些表达式与 MySql?

这是我想要的规范(来自 MySql 文档):

QUARTER WEEK DAYOFWEEK

注意: 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) 表示一年中的周数