关于Hive的练习

开始之前,先了解几个命令:

在Hive CLI中,可以使用如下一些命令

显示当前会话有多少函数可用

show functions;

显示函数的描述信息

desc function concat;

显示函数的扩展描述信息

desc function   extended concat;

现在来练习下Hive中的一些常用内置函数

先来查看下表winfunc:

hive (default)> desc winfunc;
OK
col_name	data_type	comment
id                  	int                 	                    
money               	float               	                    
type                	string              	                    
Time taken: 0.132 seconds, Fetched: 3 row(s)
hive (default)> select * from winfunc;
OK
winfunc.id	winfunc.money	winfunc.type
1001	100.0	ABC
1001	150.0	BCD
1001	200.0	CDE
1001	150.0	DEF
1002	200.0	ABC
1002	200.0	ABC
1002	100.0	BCD
1002	300.0	CDE
1002	50.0	DEF
1002	400.0	EFG
1003	100.0	ABC
1003	50.0	BCD
1004	60.0	ABC
Time taken: 1.177 seconds, Fetched: 13 row(s)

1. and和or的优先级

现在想要求下id为1001、1002的两个人工资为100.0时候的记录

hive (default)> select id,money,type from winfunc where id=1001 or id=1002 and money=100.0;
OK
id	money	type
1001	100.0	ABC
1001	150.0	BCD
1001	200.0	CDE
1001	150.0	DEF
1002	100.0	BCD
Time taken: 0.13 seconds, Fetched: 5 row(s)

发现结果并不是我们想要的,为什么呢?其实是因为or和and优先级不一样导致的,因为and的优先级比or高,所以出现了上面的结果,如果要得到我们想要的结果,该怎么处理呢?

hive (default)> select id,money,type from winfunc where (id=1001 or id=1002) and money=100.0;
OK
id	money	type
1001	100.0	ABC
1002	100.0	BCD
Time taken: 0.147 seconds, Fetched: 2 row(s)

2. cast类型转换

如果想要将上面结果中的money类型转换成int类型,该如何实现呢?

hive (default)> select id,cast(money as int),type from winfunc where (id=1001 or id=1002) and money =100.0;
OK
id	money	type
1001	100	ABC
1002	100	BCD
Time taken: 2.489 seconds, Fetched: 2 row(s)

3. case...when

hive (default)> select case 
              >  when id='1001' then 'tom' 
              >  when id='1002' then 'kitty'
              >  when id='1003' then 'jerry'
              >  else 'others'
              > end
              > from winfunc group by id;

OK
_c0
tom
kitty
jerry
others
Time taken: 1.505 seconds, Fetched: 4 row(s)

4. parse_url

语法:parse_url(string urlString, string partToExtract [, string keyToExtract])。

返回值:string

返回 URL 中指定的部分。 partToExtract 的有效值为: HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.

hive (default)> select 
              > parse_url('http://master:50070/explorer.html#/hive','HOST')
              > from winfunc limit 1;
OK
_c0
master
Time taken: 0.102 seconds, Fetched: 1 row(s)

5. concat

语法: concat(string A, string B…)

返回值: string

说明:返回输入字符串连接后的结果,支持任意个输入字符串

hive (default)> select concat(type,'123')
              > from winfunc limit 3;
OK
_c0
ABC123
BCD123
CDE123
Time taken: 0.103 seconds, Fetched: 3 row(s)

6. concat_ws

语法: concat_ws(string SEP, string A, string B…)

返回值: string

说明:返回输入字符串连接后的结果, SEP 表示各个字符串间的分隔符

hive (default)> select concat_ws('_',type,'123')
              > from winfunc limit 3;
OK
_c0
ABC_123
BCD_123
CDE_123
Time taken: 0.99 seconds, Fetched: 3 row(s)

此外,concat_ws也可以处理数组,例如:

hive (default)> select concat_ws('_',split(type,''))
              > from winfunc limit 1;
OK
_c0
_A_B_C_
Time taken: 0.125 seconds, Fetched: 1 row(s)

先将winfunc表中的第一行的type列的值通过split函数来切分成一个数组,然后通过concat_ws来将该数组中的没两个元素之间加上“_”。

7. collect_set

collect_set(x) - Returns a set of objects with duplicate elements eliminated

hive (default)> select collect_set(id)
              > from winfunc;

OK
_c0
[1001,1002,1003,1004]
Time taken: 1.546 seconds, Fetched: 1 row(s)

8. collect_list

collect_list(x) - Returns a list of objects with duplicates

Time taken: 1.546 seconds, Fetched: 1 row(s)
hive (default)> select collect_list(id)
              > from winfunc;

OK
_c0
[1001,1001,1001,1001,1002,1002,1002,1002,1002,1002,1003,1003,1004]
Time taken: 2.894 seconds, Fetched: 1 row(s)

也就是说collect_set会去重,而collect_list不会去重。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值