zoukankan      html  css  js  c++  java
  • hive函数之日期函数

    以下就是Hive内置支持的日期函数

    返回类型 函数表达式 描述
    string from_unixtime(bigint unixtime[, string format]) 将unix时间戳(1970-01-01 00:00:00 UTC)的秒数转换为一个字符串,该字符串表示当前系统时区中该时刻的时间戳,格式为“ 1970-01-01 00:00: 00”。
    bigint unix_timestamp() 以秒为单位获取当前的Unix时间戳。此函数不是确定性的,其值在查询执行范围内也不是固定的,因此会阻止对查询的适当优化-自2.0版以来已弃用此函数,而推荐使用CURRENT_TIMESTAMP常量
    bigint unix_timestamp(string date) 使用默认时区和默认语言环境将yyyy-MM-dd HH:mm:ss格式的时间字符串转化为unix时间戳(以秒为单位),如果失败,则返回0 unix_timestamp(‘2009-03-20 11:30:01’) = 1237573801
    bigint unix_timestamp(string date, string pattern) 将具有给定模式的时间字符串(请参阅[ http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html ])转换为Unix时间戳(以秒为单位),如果失败,则返回0:unix_timestamp(‘2009 -03-20’,‘yyyy-MM-dd’)= 1237532400。
    2.1.0之前的版本: string 2.1.0 开始:date to_date(string timestamp) 返回时间戳字符串(Hive 2.1.0之前)的日期部分:to_date(“ 1970-01-01 00:00:00”)=“ 1970-01-01”。从Hive 2.1.0开始,返回日期对象。在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。
    int year(string date) 返回日期或时间戳字符串的年份部分:year(“ 1970-01-01 00:00:00”)= 1970,year(“ 1970-01-01”)= 1970。
    int quarter(date/timestamp/string) 返回日期,时间戳或字符串属于一年的哪个季度(从Hive 1.3.0开始)。示例:quarter(‘2015-04-08’)= 2。
    int month(string date) 返回日期或时间戳字符串的月份部分: month(“1970-11-01 00:00:00”) = 11, month(“1970-11-01”) = 11
    int day(string date) dayofmonth(date) 返回日期或时间戳字符串的日期部分: day(“1970-11-01 00:00:00”) = 1, day(“1970-11-01”) = 1. dayofmonth(date):返回日期的月的天数的索引,范围为1到31,或者对于日期(例如“0000-00-00”或“2008-00-00”)的日期为零的日期返回0。
    int hour(string date) 返回时间字符串的小时: hour(‘2009-07-30 12:58:59’) = 12, hour(‘12:58:59’) = 12.
    int minute(string date) 返回时间字符串的分钟
    int second(string date) 返回时间字符串的秒
    int weekofyear(string date) 返回时间字符串位于一年中的第几个周内: weekofyear(“1970-11-01 00:00:00”) = 44, weekofyear(“1970-11-01”) = 44.
    int extract(field FROM source) 从源中检索字段,例如天或小时(从Hive 2.2.0开始)。源必须是日期,时间戳,时间间隔或可以转换为日期或时间戳的字符串。支持的字段包括:日,星期几,小时,分钟,月,季度,秒,周和年。 Examples: 1.select extract(month from “2016-10-20”) 结果为10. 2.select extract(hour from “2016-10-20 05:06:07”) 结果为5. 3.select extract(dayofweek from “2016-10-20 05:06:07”) 结果为5. 4.select extract(month from interval ‘1-3’ year to month) 结果为3. 5.select extract(minute from interval ‘3 12:20:30’ day to second) 结果为20.
    int datediff(string enddate, string startdate) 返回从开始日期到结束日期的天数: datediff(‘2009-03-01’, ‘2009-02-27’) = 2.
    pre 2.1.0: string 2.1.0 on: date date_add(date/timestamp/string startdate, tinyint/smallint/int days) 从开始时间startdate加上days: date_add(‘2008-12-31’, 1) = ‘2009-01-01’. 在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。
    pre 2.1.0: string 2.1.0 on: date date_sub(date/timestamp/string startdate, tinyint/smallint/int days) 从开始时间startdate减去days: date_sub(‘2008-12-31’, 1) = ‘2008-12-30’. 在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。
    timestamp from_utc_timestamp({any primitive type} ts, string timezone) 如果给定的时间戳并非UTC,则将其转化成指定的时区下时间戳 举例如下 from_utc_timestamp(2592000.0,‘PST’), from_utc_timestamp(2592000000,‘PST’) and from_utc_timestamp(timestamp ‘1970-01-30 16:00:00’,‘PST’) 都返回时间戳1970-01-30 08:00:00.
    timestamp to_utc_timestamp({any primitive type} ts, string timezone) 假设给定时间戳为给定时区的时间,将其转换为UTC时间戳. to_utc_timestamp(2592000.0,‘PST’), to_utc_timestamp(2592000000,‘PST’) and to_utc_timestamp(timestamp ‘1970-01-30 16:00:00’,‘PST’) 都返回时间戳 1970-01-31 00:00:00.
    date current_date 返回当前时间日期(从Hive 1.2.0开始)
    timestamp current_timestamp 返回当前时间戳 (从Hive 1.2.0开始)
    string add_months(string start_date, int num_months, output_date_format) 返回当前时间下再增加num_months个月的日期(从Hive 1.1.0开始). start_date是字符串,日期或时间戳。num_months是一个整数。如果start_date是该月的最后一天,或者如果结果月份的天数少于start_date的天部分,则结果是结果月份的最后一天。否则,结果与start_date具有相同的日组成部分。默认输出格式为“ yyyy-MM-dd”。 在Hive 4.0.0之前,日期的时间部分将被忽略。 从Hive 4.0.0开始,add_months支持可选参数output_date_format,该参数接受一个String,该String表示输出的有效日期格式。这样可以在输出中保留时间格式。 例如 : add_months(‘2009-08-31’, 1) 返回’2009-09-30’. add_months(‘2017-12-31 14:15:16’, 2, ‘YYYY-MM-dd HH:mm:ss’) 返回 ‘2018-02-28 14:15:16’.
    string last_day(string date) 返回日期所属月份的最后一天(从Hive 1.1.0开始)。date是格式为“ yyyy-MM-dd HH:mm:ss”或“ yyyy-MM-dd”的字符串。日期的时间部分(HH:mm:ss)将被忽略。
    string next_day(string start_date, string day_of_week) 返回当前时间的下一个星期X所对应的日期(从Hive 1.2.0开始). start_date是字符串/日期/时间戳。day_of_week是2个字母,3个字母或一周中某天的全名(例如Mo,tue,FRIDAY)。start_date的时间部分将被忽略。 例如:next_day(‘2015-01-14’,‘TU’)= 2015-01-20
    string trunc(string date, string format) 返回时间的最开始年份或月份(从Hive 1.2.0开始). 支持的格式:MONTH / MON / MM,YEAR / YYYY / YY. 例如: trunc(‘2015-03-17’, ‘MM’) = 2015-03-01. trunc(‘2016-06-26’,‘YY’)=2016-01-01
    double months_between(date1, date2) 返回日期date1和date2之间的月份数(从Hive 1.2.0开始)。如果date1晚于date2,则结果为正。如果date1早于date2,则结果为负。如果date1和date2是月份的同一天或月份的最后几天,则结果始终是整数。否则,UDF将基于31天的月份来计算结果的分数部分,并考虑时间分量date1和date2的差异。date1和date2类型可以是日期,时间戳或字符串,格式为“ yyyy-MM-dd”或“ yyyy-MM-dd HH:mm:ss”。结果四舍五入到小数点后8位。例如:months_between(‘1997-02-28 10:30:00’,‘1996-10-30’)= 3.94959677
    string date_format(date/timestamp/string ts, string fmt) 将日期/时间戳记/字符串转换为指定日期格式fmt的格式的字符串值(as of Hive 1.2.0). 支持的格式是Java SimpleDateFormat格式– https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 。第二个参数fmt应该是常量。 举例: date_format(‘2015-04-08’, ‘y’) = ‘2015’. date_format可用于实现其他UDF,例如:dayname(date) =date_format(date, ‘EEEE’) dayofyear(date) =date_format(date, ‘D’)
  • 相关阅读:
    BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
    BZOJ 3131 SDOI2013 淘金 数位dp
    BZOJ 4408 FJOI2016 神秘数 可持久化线段树
    [leetcode] Reverse Linked List
    走迷宫问题总结
    [leetcode] Max Area of Island
    [leetcode] All Paths From Source to Target
    [leetcode] Arithmetic Slices
    [leetcode] Move Zeroes
    [leetcode] Linked List Cycle
  • 原文地址:https://www.cnblogs.com/chenxiaoge/p/13335451.html
Copyright © 2011-2022 走看看