设为首页 加入收藏

TOP

Hive最新数据操作详解(超级详细)(二)
2015-07-24 09:36:55 来源: 作者: 【 】 浏览:4
Tags:Hive 最新 数据 操作 详解 超级 详细
artitioned_imported FROM '/apps/ca/yanh/data1'; \

二、 数据排序 数据排序主要包括:ORDER, and SORT. 该操作同样经常使用,以便生成已排序表从而进行后面的包括top N, maximum, minimum等取值操作。 主要操作包括ORDER BY (ASC|DESC)、SORT BY(ASC|DESC)、DISTRIBUTE BY、CLUSTER BY

1. ORDER BY (ASC|DESC) 跟RDBMS的ORDER BY操作类似,该操作输出一个全局排序的结果,因此reducer的输出结果仅有一个,所以如果大数据量下过程是十分漫长的!这时可以时候LIMIT关键字提高输出效率。如果Hive设置hive.mapred.mode = strict,那LIMIT关键字将不可使用(默认是可以使用的)。

例:按名字从大到小排序(如果数据量大,可以在最后加上LIMIT n来显示前n行) hive>

SELECT name FROM employee ORDER BY name DESC; \

2. SORT BY(ASC|DESC) 与ORDER BY (ASC|DESC)操作不同,SORT BY(ASC|DESC)操作仅输出局部有序的结果(即多个reducer输出,每个输出有序)。如果要输出全局有序,可以通过SET mapred.reduce.tasks=1;来制定reducer个数为1. 此时效果与ORDER BY (ASC|DESC) 相同。SORT BY指定列排序,可以在数据从mapper端全部传入之前完成排序(只要该列传输完毕)。

例: hive>

SET mapred.reduce.tasks=2; SELECT name FROM employee SORT BY name DESC; \ 设置2个reducer,可以看到结果并不是从大到小排列的。



例: hive>

SET mapred.reduce.tasks=1; SELECT name FROM employee SORT BY name DESC; \ 设置1个reducer,此时与ORDER BY结果相同!

3. DISTRIBUTE BY 该操作类似于RDBMS中的GROUP BY,根据制定的列将mapper的输出分组发送至reducer,而不是根据partition来分组数据。 注:如果使用了SORT BY,那么必须在DISTRIBUTE BY之后,且要分发的列必须出现在已选择的列中(因为SORT BY的性质)。

例:为选择employee_id,出错 hive>

SELECT name FROM employee_hr DISTRIBUTE BY employee_id; \

例: hive> SELECT name,employee_id FROM employee_hr DISTRIBUTE BY employee_id SORT BY name; \

4. CLUSTER BY CLUSTER BY类似于DISTRIBUTE BY和SORT BY的组合作用(作用于相同列),但不同于ORDER BY的是它仅在每个reducer进行排序,而不是全局排序,且不支持ASC和DESC。如果要实现全局排序,可以先进行CLUSTER BY然后再ORDER BY。

例: hive> SELECT name, employee_id FROM employee_hr CLUSTER BY name; \

ORDER BY和CLUSTER BY不同之处如下图所示: \

三、 数据操作和方法 为了更进一步的数据操作,我们可以对Hive进行诸如表达式、操作、方法等来对数据进行转换。在Hive wiki https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF上已经对每一个表达式和方法进行了规范。同时Hive也已经定义了一些关系型的操作、算术运算操作、逻辑运算操作、复杂类型构造器以及复杂类型操作。对于其中的关系型的操作、算术运算操作、逻辑运算操作而言,和SQL/Java中的标准操作比较类似。 Hive中的方法大致可以分为以下几类:

数学函数:这些方法主要用于数学计算,如RAND()何E().
汇总函数:这些方法主要用于对复杂类型进行size、key、value等的查询,如SIZE(Array ).
类型转换函数:这些方法主要用于对数据类型进行转换,如CAST和BINARY.
日期函数:用于对日期相关进行操作,如YEAR(string date)和MONTH(string date).
条件函数:用于返回特定条件过滤后的函数,如COALESCE、IF、和CASE WHEN.
字符串函数:此类函数主要用于字符串相关操作,如UPPER(string A) 和TRIM(string A).
聚合函数:此类函数主要用于数据聚合,如SUM(),COUNT(*).
列表生成函数:此类函数主要用于将单行输入转换为多行输出,如EXPLODE(MAP)和JSON_TUPLE(jsonString, k1, k2, ...).
自定义函数:此类由Java生成的函数作为Hive的扩展函数对Hive功能进行扩展.
可以在Hive CLI使用以下语句进行Hive内建函数查询: SHOW FUNCTIONS; //列出Hive所有函数 DESCRIBE FUNCTION ; //函数详细描述 DESCRIBE FUNCTION EXTENDED ; //更多详细信息
详细样例:
1. 复杂数据类型函数提示:SIZE函数用于计算MAP、ARRAY或嵌套MAP/ARRAY。如果size未知则返回-1.
例: hive> SELECT work_place, skills_socre, depart_title FROM employee; \
例: hive> SELECT SIZE(work_place) AS array_size, SIZE(skills_score) AS map_size, SIZE(depart_title) AS complex_size, SIZE(depart_title["Product"]) AS nest_size FROM employee; \
ARRAY_CONTAINS声明用于使用TRUE或FALSE返回值检验指定列是否包含指定值。SORT_ARRAY声明用于对数组进行升序排序。
例: hive> SELECT ARRAY_CONTAINS(work_place, 'Toronto') AS is_Toronto, SORT_ARRAY(work_place) AS sorted_array FROM employee; \
2. 日期函数提示:FROM_UNIXTIME(UNIX_TIMESTAMP())声明与Oracle中的SYSDATE函数相同,动态返回Hive服务器的当前时间。
例: hive> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()) AS current_time FROM employee limit 1; \
TO_DATE用于将获取的系统时间截取日期
例: hive> SELECT TO_DATE(FROM_UNIXTIME(UNIX_TIMES
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle基础(二):用户及权限管理 下一篇关于OGG"Loadingdatafromfil..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)