hive 返回星期几的方法

熟悉hive的人都知道,在原生版本中,目前并没有返回星期几的函数。为了解决这个问题,除了利用java自己编写udf外,也可以利用现有hive函数实现,笔者整理了以下内容供大家参考:

hive返回星期几方法:pmod(datediff(‘#date#‘, ‘2012年任意一个星期日的日期‘), 7) 。2012-01-01刚好是星期日,大家可以记忆为:

方法:pmod(datediff('#date#', '2012-01-01'), 7)
返回值:int 0-6(“0-6”分别表示“星期日-星期六”)
说明:返回日期的星期几。注意pmod和 datediff 函数的使用方法。

解析:

1、dateiff 是两个日期相减的函数,hive日期函数可以见附录:

? 日期相减函数:dateiff

语法:datediff(string enddate, string startdate)

返回值: int

说明: 返回两个时间参数的相差天数。

2、 pmod 是正取余函数:

? 正取余函数 : pmod

语法: pmod(int a, int b),pmod(double a, double b)

返回值: int double

说明: 返回正的a除以b的余数

特殊说明:

这个方法也不是唯一的方法,只是利用了datediff 和pmod函数的特点,组合使用而出。内部牛人分享的方法也可以达到相同的目的:

pmod(datediff(#date#, ‘1920-01-01‘) - 3, 7)

附录:hive日期函数

原版:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

返回类型 函数 说明
string from_unixtime(bigint unixtime[, string format]) UNIX_TIMESTAMP参数表示返回一个值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,这取决于是否是在一个字符串或数字语境中使用的功能。该值表示在当前的时区。
bigint unix_timestamp() 如果不带参数的调用,返回一个Unix时间戳(从’1970- 01 – 0100:00:00′到现在的UTC秒数)为无符号整数。
bigint unix_timestamp(string date) 指定日期参数调用UNIX_TIMESTAMP(),它返回参数值’1970- 01 – 0100:00:00′到指定日期的秒数。
bigint unix_timestamp(string date, string pattern) 指定时间输入格式,返回到1970年秒数:unix_timestamp(’2009-03-20′, ‘yyyy-MM-dd’) = 1237532400 参考:http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html
string to_date(string timestamp) 返回时间中的年月日: to_date(“1970-01-01 00:00:00″) = “1970-01-01″
string to_dates(string date) 给定一个日期date,返回一个天数(0年以来的天数)
int year(string date) 返回指定时间的年份,范围在1000到9999,或为”零”日期的0。
int month(string date) 返回指定时间的月份,范围为1至12月,或0一个月的一部分,如’0000-00-00′或’2008-00-00′的日期。
int day(string date) dayofmonth(date) 返回指定时间的日期
int hour(string date) 返回指定时间的小时,范围为0到23。
int minute(string date) 返回指定时间的分钟,范围为0到59。
int second(string date) 返回指定时间的秒,范围为0到59。
int weekofyear(string date) 返回指定日期所在一年中的星期号,范围为0到53。
int datediff(string enddate, string startdate) 两个时间参数的日期之差。
int date_add(string startdate, int days) 给定时间,在此基础上加上指定的时间段。
int date_sub(string startdate, int days) 给定时间,在此基础上减去指定的时间段。

时间: 2024-08-29 15:02:06

hive 返回星期几的方法的相关文章

返回星期方法

返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天.如果要返回相对应"星期",通过数组完成,代码如下: <script type="text/javascript"> var mydate=new Date();//定义日期对象 var weekday=["星期日","星期一","星期二","星期三","星期四","星

js关于返回星期及日期格式的方法

,    js中使用Date()日期对象,星期返回值为0-6,不会直接返回星期几,所以要转成文字"星期X",思考了下我是这么写的: 1 var myd=new Date(); 2 var mydate=myd.getDay(); 3 switch(mydate){ 4 case 0: 5 document.write("星期日"); 6 break; 7 case 1: 8 document.write("星期一"); 9 break; 10 c

Windows中openProcess函数返回ERROR_ACCESS_DENIED的解决方法

辛辛苦苦开始了创业,好不容易见到了天使投资人,如何去打动明星投资人?如何能拿到那一笔"救命"钱?看徐小平.雷军这样说. 1. 天使投资人偏爱投什么样的创业者? 雷军:你有强烈的渴望做成一件伟大的事情,并且能让投资者相信你能做得成这件事情.掏自己的钱创业是创业成功率最高的一种,因为在那一瞬间你重视了,你花的每一分钱都是自己的血汗钱和别人的血汗钱,不会轻松把别的投资人的钱打水漂. 曾李青:我们体系内投了好几家公司,发现我们投资成功的公司要么是有做大公司的成功经验,要么是名校毕业.好学校不一

(转)Struts2返回JSON对象的方法总结

转自:http://kingxss.iteye.com/blog/1622455 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择.而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好的支持.但是,在开发工作中,对功能的升级是基于既定架构是很常见的情况.本人碰到需要用开发基于Struts2的HTTP+JSON返回类型接口就是基于既定框架结构下进行的. Struts2返回JSON有两种方式:1.使用S

.NET(C#):await返回Task的async方法

一.  FrameWork 4.0之前的线程世界    在.NET FrameWork 4.0之前,如果我们使用线程.一般有以下几种方式: 使用System.Threading.Thread 类,调用实例方法Start()开启一个新线程,调用Abort()方法来提前终止线程. 使用System.Threading.ThreadPool类,调用静态方法QueueUserWorkItem(),将方法放入线程池队列,线程池来控制调用. 使用BeginInvoke,EndInvoke,BeginRead

带有参数和返回值的对象方法

# 按要求设计一个计算器类 # 属性: 无. 功能: 1) 返回派的值. 2) 计算一个整数的平方. 3) 计算两个整数的和. // 按要求设计计算器类 // 类的声明 #import <Foundation/Foundation.h> @interface Calculator : NSObject // 没有属性不用写大括号{} - (double) pi; - (int) square:(int)num; // 关于方法名的说明见下面 - (int) sumOfNum1:(int)num

Structs2中Action返回json到前台方法

1.传统方式JSON输出 这一点跟传统的Servlet的处理方式基本上一模一样,代码如下 01 public void doAction() throws IOException{ 02         HttpServletResponse response=ServletActionContext.getResponse(); 03         //以下代码从JSON.java中拷过来的 04         response.setContentType("text/html"

#获取本机IP地址时排除IPv6类型,只返回IPv4地址的方法

public static string GetLocalIP(){try{string HostName = Dns.GetHostName(); //得到主机名IPHostEntry IpEntry = Dns.GetHostEntry(HostName); for (int i=0; i < IpEntry.AddressList.Length; i++){//从IP地址列表中筛选出IPv4类型的IP地址//AddressFamily.InterNetwork表示此IP为IPv4,//Ad

LinQ 定义带有返回类型的扩展方法3.2

using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Diagnostics; namespace ExtensionWithReturn { class Program { static void Main(string[] args) { var s