关于Hive的练习

来源:互联网 发布:商品标题搜索优化 编辑:程序博客网 时间:2024/05/01 21:38

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

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

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

show functions;

显示函数的描述信息

desc function concat;

显示函数的扩展描述信息

desc function   extended concat;

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

先来查看下表winfunc:

hive (default)> desc winfunc;OKcol_namedata_typecommentid                  int                                     money               float                                   type                string                                  Time taken: 0.132 seconds, Fetched: 3 row(s)hive (default)> select * from winfunc;OKwinfunc.idwinfunc.moneywinfunc.type1001100.0ABC1001150.0BCD1001200.0CDE1001150.0DEF1002200.0ABC1002200.0ABC1002100.0BCD1002300.0CDE100250.0DEF1002400.0EFG1003100.0ABC100350.0BCD100460.0ABCTime 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;OKidmoneytype1001100.0ABC1001150.0BCD1001200.0CDE1001150.0DEF1002100.0BCDTime 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;OKidmoneytype1001100.0ABC1002100.0BCDTime 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;OKidmoneytype1001100ABC1002100BCDTime 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_c0tomkittyjerryothersTime 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_c0masterTime 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_c0ABC123BCD123CDE123Time 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_c0ABC_123BCD_123CDE_123Time 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
原创粉丝点击