hive 常用函数

烂漫一生 提交于 2020-02-05 07:14:00

1.日期比较函数: datediff语法: datediff(string enddate,string startdate)

返回值: int 说明: 返回结束日期减去开始日期的天数。

举例:hive> select datediff('2016-12-30','2016-12-29');    返回1

 

2.日期增加函数: date_add语法: date_add(string startdate, intdays)

返回值: string 说明: 返回开始日期startdate增加days天后的日期。

举例:hive>select date_add('2016-12-29',10);  返回2017-01-08

 

3.日期减少函数: date_sub语法: date_sub (string startdate,int days)

返回值: string 说明: 返回开始日期startdate减少days天后的日期。

举例:hive>select date_sub('2016-12-29',10);   返回2016-12-19

查询近30天的数据select * from table where  datediff(current_timestamp,create_time)<=30;

create_time 为table里的字段,current_timestamp 返回当前时间 2018-06-01 11:00:00

4.to_date():日期时间转日期函数

select to_date('2015-04-02 13:34:12');
输出:2015-04-02

5.current_date():当前日期函数

hive> select current_date();        返回:2019-12-23

6.case when语句:

case
         when t2.charge_origin in (0, 10) then
          'pc'
         when t2.charge_origin = 22 then
          '手机买家'
         when t2.charge_origin = 28 then
          '八戒校园APP'
         else
          '其他'
       end as `终端`,

7.如何通过时间戳获取当前是多少点? create_time:1406714751

hour(from_unixtime(create_time))

select hour(from_unixtime(1406714751))  返回:18

8.from_unixtime()函数,可以把时间戳格式的时间,转化为年月日时分秒格式的时间

select from_unixtime(1406707470,'yyyy-MM-dd HH:mm:ss');

10.year() 日期转年函数:

year语法:   year(string date) 返回值: int

select year(from_unixtime(1406714751)) 返回:2014

11:month():日期转月函数

month语法: month   (string date)
返回值: int
说明: 返回日期中的月份

select month(from_unixtime(1406714751))  返回:7

12.day():日期转天函数

day语法: day   (string date)
返回值: int
说明: 返回日期中的天。
举例:
hive>   select day('2011-12-08 10:03:01');
8

13.hour():日期转小时函数

hour语法: hour   (string date)
返回值: int
说明: 返回日期中的小时。

select hour('2011-12-08 10:03:01') ; 返回10

14.minute():日期转分钟函数:

minute语法: minute   (string date)
返回值: int
说明: 返回日期中的分钟。
举例:
hive>   select minute(’2011-12-08 10:03:01′) from dual;
15.second():日期转秒函数:

second语法: second   (string date)
返回值: int
说明: 返回日期中的秒。
举例:
hive>   select second(’2011-12-08 10:03:01′) from dual;
1

16.weekofyear():日期转周函数:

weekofyear语法:   weekofyear (string date)
返回值: int
说明: 返回日期在当前的周数。
举例:
hive>   select weekofyear(’2011-12-08 10:03:01′) from dual;
49

17.cast()类型转换函数

比如:

cast(date as date)

cast(timestamp as date)

cast(string as date)

cast(date as string)

18.round():取整函数:

round 语法: round(double a)
返回值: BIGINT

举例: select round(3.5) 返回:4.0

第二种语法:指定精度取整函数: round

语法: round(double a, int d)
返回值: DOUBLE
说明: 返回指定精度d的double类型

举例: select round(3.1415926,4) ;返回:3.1416

19、向下取整函数: floor
语法: floor(double a)
返回值: BIGINT
说明: 返回等于或者小于该double变量的最大的整数
hive> select floor(3.1415926) from iteblog;
3
hive> select floor(25) from iteblog;
25
20、向上取整函数: ceil
语法: ceil(double a)
返回值: BIGINT
说明: 返回等于或者大于该double变量的最小的整数
hive> select ceil(3.1415926) from iteblog;
4
hive> select ceil(46) from iteblog;
46
21、向上取整函数: ceiling
语法: ceiling(double a)
返回值: BIGINT
说明: 与ceil功能相同

hive> select ceiling(3.1415926) from iteblog;
4
hive> select ceiling(46) from iteblog;
46
22、取随机数函数: rand
语法: rand(),rand(int seed)
返回值: double
说明: 返回一个0到1范围内的随机数。如果指定种子seed,则会等到一个稳定的随机数序列
hive> select rand() from iteblog;
0.5577432776034763
hive> select rand() from iteblog;
0.6638336467363424
23.CONCAT()函数

CONCAT()函数用于将多个字符串连接成一个字符串。
CONCAT(str1,str2,…)                       
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。可以有一个或多个参数

24.CONCAT_WS函数

使用函数CONCAT_WS()。使用语法为:CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

SELECT CONCAT_WS(',','First name',NULL,'Last Name');返回结果为
| CONCAT_WS(',','First name',NULL,'Last Name') |
+----------------------------------------------+
| First name,Last Name                         |
+----------------------------------------------+

25.GROUP_CONCAT()函数

GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。
使用表info作为示例,其中语句SELECT locus,id,journal FROM info WHERE locus IN('AB086827','AF040764');的返回结果为

+----------+----+--------------------------+
| locus    | id | journal                  |
+----------+----+--------------------------+
| AB086827 |  1 | Unpublished              |
| AB086827 |  2 | Submitted (20-JUN-2002)  |
| AF040764 | 23 | Unpublished              |
| AF040764 | 24 | Submitted (31-DEC-1997)  |
+----------+----+--------------------------+

1、使用语法及特点:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
在 MySQL 中,你可以得到表达式结合体的连结值。通过使用 DISTINCT 可以排除重复值。如果希望对结果中的值进行排序,可以使用 ORDER BY 子句。
SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (","),可以通过指定 SEPARATOR "" 完全地移除这个分隔符。
可以通过变量 group_concat_max_len 设置一个最大的长度。在运行时执行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大长度被设置,结果值被剪切到这个最大长度。如果分组的字符过长,可以对系统参数进行设置:SET @@global.group_concat_max_len=40000;

2、使用示例:
语句 SELECT locus,GROUP_CONCAT(id) FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus; 的返回结果为
+----------+------------------+
| locus    | GROUP_CONCAT(id) |
+----------+------------------+
| AB086827 | 1,2              |
| AF040764 | 23,24            |
+----------+------------------+

语句 SELECT locus,GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;的返回结果为
+----------+----------------------------------------------------------+
| locus    | GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') |
+----------+----------------------------------------------------------+
| AB086827 | 2_1                                                      |
| AF040764 | 24_23                                                    |
+----------+----------------------------------------------------------+

语句SELECT locus,GROUP_CONCAT(concat_ws(', ',id,journal) ORDER BY id DESC SEPARATOR '. ') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;的返回结果为
+----------+--------------------------------------------------------------------------+
| locus    | GROUP_CONCAT(concat_ws(', ',id,journal) ORDER BY id DESC SEPARATOR '. ') |
+----------+--------------------------------------------------------------------------+
| AB086827 | 2, Submitted (20-JUN-2002). 1, Unpublished                               |
| AF040764 | 24, Submitted (31-DEC-1997) . 23, Unpublished                            |

四、CONCAT_WS(SEPARATOR ,collect_set(column))
                                                                                       ===>GROUP_CONCAT()函数
  在我们公司的hive(华为集群FunctionInsight)因为hive版本问题,并没有GROUP_CONCAT函数。只能用concat_ws和collect_set函数代替
但是排序性丧失。

26.instr(string str, string substr)

instr(string str, string substr) 查找字符串str中子字符串substr出现的位置,如果查找失败将返回0,如果任一参数为Null将返回null,注意位置为从1开始的。

返回值:int

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!