设为首页 加入收藏

TOP

Hive最新数据操作详解(超级详细)(三)
2015-07-24 09:36:55 来源: 作者: 【 】 浏览:3
Tags:Hive 最新 数据 操作 详解 超级 详细
TAMP())) AS current_date FROM employee limit 1; \
3. 多种不同数据类型的CASE:在Hive0.13.0版本之前THEN或者ELSE后面的数据类型必须相同。否则可能会产生异常值,如ELSE后的数据类型必须同THEN。此问题在0.13.0之后得到修复。
例:由于数据类型不同造成异常返回 hive> SELECT CASE WHEN 1 IS NULL THEN 'TRUE' ELSE 0 END AS case_result FROM employee LIMIT 1; \
4. 解析和查找:LATERAL VIEW是用来生成用户自定义表以展开的形式显示map或array的值,如同EXPLODE(),但其会忽略值为NULL的列,如果要显示这些列,可以使用LATERAL VIEW OUTER(Hive0.12.0之后版本)
例: hive> INSERT INTO TABLE employee SELECT 'Steven' AS name, array(null) AS work_place, named_struct("sex","Male","age",30) AS sex_age, map("Python", 90) AS skills_score, map("R&D",array('Developer')) AS depart_title FROM employee LIMIT 1; SELECT name, work_place, skills_score FROM employee; \
例: hive> SELECT name, workplace, skills, score FROM employee LATERAL VIEW explode(work_place) wp AS workplace LATERAL VIEW explode(skills_score) ss AS skills, score; \
例: hive> SELECT name, workplace, skills, score FROM employee LATERAL VIEW OUTER explode(work_place) wp AS workplace LATERAL VIEW explode(skills_score) ss AS skills, score; \
REVERSE用于将指定字符串进行反转,SPLIT用于将字符串按指定分隔符进行分隔。
例: hive> SELECT reverse(split(reverse('/apps/ca/yanh/employee.txt'),'/')[0]) AS linux_file_name FROM employee LIMIT 1; \
REVERSE将输出转换为单独元素,而COLLECT_SET和COLLECT_LIST则是反过来将元素组合成集合进行输出。COLLECT_SET和COLLECT_LIST的不同在COLLECT_SET返回的集合不含重复元素,而COLLECT_LIST则可以包含重复元素。
例: hive> SELECT collect_set(work_place[0]) AS flat_wprkplace FROM employee; \
例:
hive> SELECT collect_list(work_place[0]) AS flat_wprkplace FROM employee; \ 注:Hive0.11.0及以前不支持collect_list
5. 虚拟列:虚拟列是Hive中特殊的列的特殊函数类型。目前为止Hive仅支持2个虚拟列:INPUT_FILE_NAME和BLOCK_OFFSET_INSIDE_FILE。INPUT_FILE_NAME列是mapper的输入文件名,BLOCK_OFFSET_INSIDE_FILE是当前全部文件位置或当前压缩文件的块偏移量。
例: hive> SELECT INPUT_FILE_NAME, BLOCK_OFFSET_INSIDE_FILE AS OFFSIDE FROM employee_id; 注:在Hive0.13.0上测试失败,没有该函数。
6. wiki未提到的函数:
例:isnull,用于检验值是否为空 hive> SELECT work_place, isnull(work_place) is_null, isnotnull(work_place) is_not_null FROM employee; \
例:assert_true,如果条件为false时抛出异常 hive> SELECT assert_true(work_place IS NULL) FROM employee; \
例:elt,返回第n个字符串 hive> SELECT elt(2, 'New York', 'Beijing', 'Toronto') FROM employee LIMIT 1; \
例:current_database,返回当前数据库 hive> SELECT current_database(); \ 注:Hive0.11.0及以前没有此函数
四、 数据转换 在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的常规数据操作进行较为得心应手的使用了吧。以上有截图的用例均由本人亲测可行,测试环境为Hive0.11.0,部分Hive0.13.0的特性是在0.13.0下进行测试,在截图下均有说明。
首页 上一页 1 2 3 下一页 尾页 3/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)