hive中的增删改如何实现
来源:互联网 发布:ida pro 7 linux 编辑:程序博客网 时间:2024/05/17 06:33
转载:http://blog.csdn.net/yonghutwo/article/details/39897845
Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO ... VALUES 添加数据,使用 UPDATE ... SET 修改数据。但是随着云计算和hadoop的发展越来越多的传统系统需要云化,这其中必然涉及到数据的增删改查,如何根据hive的特点实现相应的功能是不能回避的,以下就是本人在hive改造Oracle存储过程中的解决办法。
Update语法:
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1)]
Select [column]...,[update data]... FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val2)]
Select [column]... FROM [tablename1 left outer join (select [column] ... From from_statement) ON equality_expression ( AND equality_expression )* where [right table column is NULL] [WHERE where_condition]]
INSERT OVERWRITE TABLE tablename2 [PARTITION (partcol1=val)]
Select * from tablename1 where partition_name=’va1’ or partition_name=val2;
eg:A表数据如下id(String) name(String)
----------------------------
1 aaa
2 bbb
3 ccc
-----------------------------
要求更新2 bbb为2 ddd
hive脚本如下(TMP_A为分区表):
insert overwrite table TMP_A partition (p='one') select id,"ddd" from A where id = 2;
insert overwrite table TMP_A partition (p='two') select a.id,a.name from A a left outer join (select id from TMP_A where name='one') b on (a.id=b.id) where b.id is NULL:
insert overwrite table A select * from TMP_A where p='one' or p='two';
Delete语法:
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement
[WHERE where_condition]
[join table]
eg:A表数据如下
id(String) name(String)
----------------------------
1 aaa
2 bbb
3 ccc
-----------------------------
要求删除2 bbb
hive脚本如下:
insert overwrite table A select id,name from A where id !=2;
ADD语法
通过分区增加。
如果目标表不是分区表则需要借助中间表,将目标表中的数据放入中间表的一个分区,然后将要增加的数据放入中间表的另一个分区,然后:insert overwrite table 目标表select中间表的两个分区的数据。
如果目标表有分区则直接将要增加的数据放入目标表的一个分区。
如果要增加的数据来自hive表则用insert overwrite .... select ...语句将数据放入目标表分区
如果要增加的数据来自文件则用load data.... tablename partition...
- hive中的增删改如何实现
- hive中的增删改如何实现
- hive中的增删改如何实现
- hibernate中的增删改查实现代码
- 用AJAX实现网页中的增删改
- MySQL中的增删改
- qlistwidget中的增删改
- javascript实现增删改
- ContentProvider实现增删改
- js 如何实现对数据库的增删改查
- 如何有效实现应用系统的增删改查功能
- 基础设置中的js,实现增删改查
- java 中的 jdbc 实现 增删改查 操作
- 实现单链表中的增删查改(2)
- Hive的基本增删改查代码
- hive的简单增删改查
- Hive 表增删改查CRUD操作
- hibernate中的增删改查
- Opencv学习笔记目标跟踪
- Tomcat下为每个Web应用配置不同的访问端口
- 工业相机知识点总结(1)
- 多线程上传文件
- 状压dp
- hive中的增删改如何实现
- struts2_Action、拦截器、值栈、OGNL表达式、ModelDriven实现方案
- 批量修改,删除数据库中 表名是以特定字符开头的表!
- hdu1874
- Array.prototype.reduce()
- SDK更新不了问题解决
- stm32之can总线过滤器的标准帧、扩展帧、远程帧等
- Android 事件分发
- MTK IMS框架简析(2)——IMS注册过程