Hive最新数据操作详解(超级详细)
来源:互联网 发布:最新网络红歌排行榜 编辑:程序博客网 时间:2024/04/29 19:35
数据操作能力是大数据分析至关重要的能力。数据操作主要包括:更改(exchange),移动(moving),排序(sorting),转换(transforming)。Hive提供了诸多查询语句,关键字,操作和方法来进行数据操作。
数据:employee_hr.txt http://pan.baidu.com/s/1c0D9TpI
原文链接:http://blog.csdn.net/yhao2014/article/details/46312469
一、 数据更改
数据更改主要包括:LOAD, INSERT, IMPORT, and EXPORT
- LOAD DATA
- INSERT
- EXPORT and IMPORT
二、 数据排序
数据排序主要包括:ORDER, and SORT. 该操作同样经常使用,以便生成已排序表从而进行后面的包括top N, maximum, minimum等取值操作。
主要操作包括ORDER BY (ASC|DESC)、SORT BY(ASC|DESC)、DISTRIBUTE BY、CLUSTER BY
- ORDER BY (ASC|DESC)
跟RDBMS的ORDER BY操作类似,该操作输出一个全局排序的结果,因此reducer的输出结果仅有一个,所以如果大数据量下过程是十分漫长的!这时可以时候LIMIT关键字提高输出效率。如果Hive设置hive.mapred.mode = strict,那LIMIT关键字将不可使用(默认是可以使用的)。 - 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端全部传入之前完成排序(只要该列传输完毕)。 - DISTRIBUTE BY
该操作类似于RDBMS中的GROUP BY,根据制定的列将mapper的输出分组发送至reducer,而不是根据partition来分组数据。
注:如果使用了SORT BY,那么必须在DISTRIBUTE BY之后,且要分发的列必须出现在已选择的列中(因为SORT BY的性质)。 - CLUSTER BY
CLUSTER BY类似于DISTRIBUTE BY和SORT BY的组合作用(作用于相同列),但不同于ORDER BY的是它仅在每个reducer进行排序,而不是全局排序,且不支持ASC和DESC。如果要实现全局排序,可以先进行CLUSTER BY然后再ORDER 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 ; //更多详细信息
详细样例:
- 复杂数据类型函数提示:SIZE函数用于计算MAP、ARRAY或嵌套MAP/ARRAY。如果size未知则返回-1.
- 日期函数提示:FROM_UNIXTIME(UNIX_TIMESTAMP())声明与Oracle中的SYSDATE函数相同,动态返回Hive服务器的当前时间。
- 多种不同数据类型的CASE:在Hive0.13.0版本之前THEN或者ELSE后面的数据类型必须相同。否则可能会产生异常值,如ELSE后的数据类型必须同THEN。此问题在0.13.0之后得到修复。
- 解析和查找:LATERAL VIEW是用来生成用户自定义表以展开的形式显示map或array的值,如同EXPLODE(),但其会忽略值为NULL的列,如果要显示这些列,可以使用LATERAL VIEW OUTER(Hive0.12.0之后版本)
- 虚拟列:虚拟列是Hive中特殊的列的特殊函数类型。目前为止Hive仅支持2个虚拟列:INPUT_FILE_NAME和BLOCK_OFFSET_INSIDE_FILE。INPUT_FILE_NAME列是mapper的输入文件名,BLOCK_OFFSET_INSIDE_FILE是当前全部文件位置或当前压缩文件的块偏移量。
- wiki未提到的函数:
例:isnull,用于检验值是否为空
例:assert_true,如果条件为false时抛出异常
例:elt,返回第n个字符串
例:current_database,返回当前数据库名
四、 数据转换
在Hive0.13.0以前不支持行级的数据转换。因此,数据行的更新、插入、删除都不能实现。因此数据重写只能发生在表或者分区,这使得Hive很难处理并发读写和数据清洗的情况。但是从0.13.0开始,Hive提供了原子性、一致性、隔离性和持久性(ACID)的行级数据处理功能。如今所有的转换操作支持ORC(优化排柱状,从Hive0.11.0开始支持)文件和桶列表中的数据。
以下配置参数需要适当的配置以开启Hive的转换功能:
SET hive.support.concurrency = true;
SET hive.enforce.bucketing = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
SET hive.compactor.initiator.on = true;
SET hive.compactor.worker.threads = 1;
SHOW TRANSACTIONS可以对当前已开启的转换操作进行查询:
hive>
SHOW TRANSACTIONS;
从Hive0.14.0开始,行级插入数值、更新和删除可以使用以下语法规则进行实现:
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] …)] VALUES values_row [, values_row …];
UPDATE tablename SET column = value [, column = value…] [WHERE expression];
DELETE FROM tablename [WHERE expression];
- Hive最新数据操作详解(超级详细)
- Hive最新数据操作详解(超级详细)
- Hive最新数据操作详解(超级详细)
- Hive最新数据操作详解(超级详细)
- Servlet详解(超级详细)
- Hive配置+haddop为底层存储系统+远程mysql+简单的hive数据操作(详细哦)
- hive 分区的超级详细解释
- Hive官方手册学习(三)Hive数据操作语言
- HIVE 数据操作 DML
- hive 数据操作
- HIVE的数据操作
- mysql hive操作数据
- Hive数据操作
- hive数据操作
- Hive Cilent数据操作
- hive数据操作
- hive 数据操作(二)
- hive数据操作
- 利用mysql存储过程向数据库批量插入数据
- 升级Xcode8后控制台输出警告
- Index Templates API
- Ajax局部刷新后,重新加载百度分享
- 算法之数字反转问题
- Hive最新数据操作详解(超级详细)
- 买房购车注意事项
- 学习 Node.js 的 6 个步骤
- 算法基础4—快速排序
- 华夏群英传隐私政策
- 项目知识复习3----CAN总线
- VC++6.0 制作标准dll(动态库)
- Linux常用的20条命令
- 0x5f3759df的推导