Hive DateTime Truncators(QUARTER,WEEK,DAYOFWEEK)?

时间:2015-10-08 06:51:38

标签: sql datetime hive

是否有任何表达式可以获取Hive(v0.14.1)中DateTime字段的WEEKDAYOFWEEKYii::$app->runAction('new_controller/new_action', $params);,它们与MySql中的这些buildin函数做同样的事情?< / p>

这里是我想要的规范(来自MySql doc):

QUARTER WEEK DAYOFWEEK

注意: 1.函数quarter()是在Hive 1.3中引入的,但是我需要一个expr来支持更低版本。 2.支持函数weekofyear()而不是week(),但是有一点不同。但没关系,所以请忽略这个。

4 个答案:

答案 0 :(得分:6)

假设DateTime字段为order_time

  • DAYOFWEEK:PMOD(DATEDIFF(order_time, '2012-01-01'), 7)
  • 周:WEEKOFYEAR(order_time)
  • QUARTER(hive&lt; 1.3):(INT((MONTH(order_time)-1)/3)+1)
  • QUARTER(hive&gt; = 1.3):QUARTER(order_time)

答案 1 :(得分:1)

仅使用数学就知道如何将一个月变成四分之一总是有帮助的:

floor((cast(substr(visit_date, 6,2) as int) - 1) / 3) + 1

答案 2 :(得分:0)

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF,您可以找到&#39;日期功能&#39;。你会发现&#39; Quarter&#39;和周&#39;那里。

对于dayofweek,你可以使用类似的东西:

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

答案 3 :(得分:0)

要获取Hive <1.3.0的季度,请使用ceil(month(order_time) / 3.0)quarter(order_time)用于Hive> = 1.3.0

一周中的某天使用date_format('2016-12-01' ,'u')

WEEKOFYEAR(order_time)表示一年中的第几周