Hive从0.14版本开始支持事务和行级更新,但缺省是不支持的,需要一些附加的配置。要想支持行级insert、update、delete,需要配置Hive支持事务。

一、Hive具有ACID语义事务的使用场景

1. 流式接收数据。

许多用户使用诸如Apache Flume、Apache Storm或Apache Kafka这样的工具将流数据灌入Hadoop集群。当这些工具以每秒数百行的频率写入时,Hive也许只能每15分钟到1小时添加一个分区,因为过于频繁地添加分区很快就会使一个表中的分区数量难以维护。而且这些工具还可能向已存在的分区中写数据,但是这样将会产生脏读(可能读到查询开始时间点以后写入的数据),还在这些分区的所在目录中遗留大量小文件,进而给NameNode造成压力。在这个使用场景下,事务支持可以获得数据的一致性视图同时避免产生过多的文件。

2. 缓慢变化维。

在一个典型的星型模式数据仓库中,维度表随时间的变化很缓慢。例如,一个零售商开了一家新商店,需要将新店数据加到商店表,或者一个已有商店的营业面积或其它需要跟踪的特性改变了。这些改变会导致插入或修改个别记录。从0.14版本开始,Hive支持行级更新。

3. 数据重述。

有时发现数据集合有错误并需要更正。或者当前数据只是个近似值(如只有全部数据的90%,得到全部数据会滞后)。或者业务业务规则可能需要根据后续事务重述特定事务(打个比方,一个客户购买了一些商品后又购买了一个会员资格,此时可以享受折扣价格,包括先前购买的商品)。或者一个客户可能按照合同在终止了合作关系后要求删除他们的客户数据。从Hive 0.14开始,这些使用场景可以通过INSERT、UPDATE和DELETE支持。

二、配置Hive支持事务(Hive 2.0版)

hive.support.concurrency

true

hive.exec.dynamic.partition.mode

nonstrict

hive.txn.manager

org.apache.hadoop.hive.ql.lockmgr.DbTxnManager

hive.compactor.initiator.on

true

hive.compactor.worker.threads

1

--建立非分区表并加载数据

CREATE TABLE t1 (id INT, name STRING, cty STRING, st STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY',';

LOAD DATA LOCAL INPATH'/home/grid/a.txt'INTO TABLE t1;

SELECT*FROM t1;--建立外部分区事务表并加载数据

CREATE EXTERNAL TABLE t2 (id INT, name STRING) PARTITIONED BY (country STRING, state STRING)

CLUSTERED BY (id) INTO8BUCKETS

STORED AS ORC TBLPROPERTIES ('transactional'='true');

INSERT INTO T2 PARTITION (country, state) SELECT*FROM T1;

SELECT*FROM t2;--修改数据

INSERT INTO TABLE t2 PARTITION (country, state) VALUES (5,'刘','DD','DD');

UPDATE t2 SET name='张' WHERE id=1;

DELETE FROM t2 WHERE name='李四';

SELECT* FROM t2;

在hdfs上可以看到这些分桶之后的文件但是文件直接查看会乱码,需要借助命令,参考https://orc.apache.org/docs/hive-ddl.html

To getinformation about an ORC file, use the orcfiledump command.% hive --orcfiledump As of Hive1.1, to display the data inthe ORC file, use:%hive --orcfiledump -d

下面是遇到的两个问题,解决办法是修改配置文件支持事务,第二重新建表修改表的存储格式和添加表属性STORED AS ORC TBLPROPERTIES ('transactional'='true');

Attempt to do update or delete using transaction manager that does not support these operations.

Attempt to do update or delete on table mydb.stu_p that does not use an AcidOutputFormat or is not bucketed

总结,如果需要使用hive那么需要在创建表的时候声明STORED AS ORC TBLPROPERTIES ('transactional'='true'); ,我们使用的默认的TEXTFILE格式是不支持的,

ORC格式文件的数据也不是直接导入的,而是从已经有的额表中查询并插入的

参考博客:http://blog.csdn.net/wzy0623/article/details/51483674

delete hive_hive执行更新和删除操作相关推荐

  1. Mysql创建触发器实现不同表的插入、更新、删除操作

    说明:Mysql5.0以上的版本才支持下面的操作. Mysql 触发器的插入.更新.删除操作. 在这里建了两个表:其中这两个表的结构不一样,这里给表admin建立触发器 在对表admin操作的同时,触 ...

  2. python查询mysql数据库_python针对mysql数据库的连接、查询、更新、删除操作示例...

    本文实例讲述了python针对mysql数据库的连接.查询.更新.删除操作.分享给大家供大家参考,具体如下: 连接 一 代码 import pymysql # 打开数据库连接 db = pymysql ...

  3. java 删除数据库_【Java】执行数据库的删除操作

    import java.sql.*; //执行数据库的删除操作 public class DeleteData { //定义MySQL的数据库驱动程序 public static final Stri ...

  4. webform中提交按钮同时执行更新和插入操作_软件测试中的功能测试点(三)

    26.输入法半角全角检查 再输入信息中,输入一个或连串空格,查看系统如何处理,如对于要求输入符点型数据的项中,输入全角的小数点("."或".",如4.5):输入 ...

  5. ClickHouse 数据插入、更新与删除操作 SQL

    1.1. 数据操作 数据操作语言( DML,Data Manipulation Language ) 用于在数据库表中添加(插入).删除和修改(更新)数据.本节主要介绍ClickHouse中的数据插入 ...

  6. 【转】Subsonic的添加和更新、删除操作

    Subsonic的添加和更新.删除操作 2007-11-30 22:07 例如有数据表: Table Product Id int,(自动增长) Name Nvarchar 用Subsonic DAL ...

  7. mysql删除新添加数据_MySQL数据库基础(六)——SQL插入、更新、删除操作

    MySQL数据库基础(六)--SQL插入.更新.删除操作 一.插入数据 1.为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值. INSERT INTO ta ...

  8. Java 技术篇-java连接并操作数据库实例演示,执行查询、插入、更新和删除操作

    Java 操作数据库 第一章:Java 代码四个类实现 ① 项目结构展示 ② 数据库连接类 ③ 数据库查询类 ④ 数据库更新类 ⑤ 数据库主类 第二章:查询和更新操作实例演示 ① 查询操作演示 ② 更 ...

  9. repeater控件 php,Repeater控件实现编辑、更新、删除操作

    如何在Repeater控件中实现像GridView控件一样的编辑.更新.删除功能? 下面给出示例 vs.net2008(C#)下编写.来自 admin10000.com 后台.cs代码protecte ...

  10. 【Flask】数据的CRUD之更新和删除操作

    前提:需要生成数据表 下面的第一步到第六步是生成数据表的操作步骤 第一步:数据库配置 # 数据库的配置变量 HOSTNAME = '127.0.0.1' PORT = '3306' DATABASE ...

最新文章

  1. 引人遐想,用 Python 获取你想要的 “某个人” 摄像头照片
  2. 【编辑器】VSCode的Web前端(html,css,JavaScript)开发环境打造
  3. 4 拼接_3个孩子,64㎡小户型内“镶嵌”4室一厅,餐桌还能随意拼接
  4. python--getitme\setitem 支持索引与分片
  5. 梦幻西游html源码,index.html
  6. 全栈学习的知识点梳理(一)
  7. 解决Linux中Ubuntu16.04声音一直静音的方法
  8. python中matplotlib调整图例位置
  9. 启动记事本后在任务栏可以看到它,但是却没有在桌面窗口显示的问题
  10. java集成微信发送模板消息
  11. oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集
  12. 双活解决方案如何部署“应用”双活?
  13. 差之毫厘谬之千里!带你认识CPU后缀含义
  14. [汇] 立即寻址,直接寻址,间接寻址
  15. 如何熟练掌握MATLAB机器学习、深度学习在图像中的处理
  16. 2021年起重机司机(限桥式起重机)报名考试及起重机司机(限桥式起重机)理论考试
  17. 个人知识管理为什么要软件工具为主理念为次?
  18. 地球网格剖分标准学习
  19. 150 元低成本改装家里的门锁,抓好软件硬件,向物联网出发
  20. AppWidght全面学习之电量监控小部件的实现详解

热门文章

  1. 用计算机如何算针入度指数,沥青针入度指数怎么计算?需要计算公式,最好说的详细一点!...
  2. MyBatis Mapper.xml的choose/case标签详解
  3. 程序猿段子_程序员的十个段子,能看懂的都是深有同感!
  4. 离开公司你什么都不是
  5. 图算法设计之用普里姆Prim算法构造最小生成树
  6. python猫狗大战游戏下载_猫狗大战RPG游戏下载
  7. 【PyG】文档总结以及项目经验(持续更新
  8. DIV网页排版入门指南
  9. Git创建版本库及git init 、add 和 commit -m 的基本使用
  10. 火狐 全屏_如何禁用Firefox的全屏警告消息