hive支持update、delete
什么是ACID,为什么要用它?
ACID代表数据库事务的四个特性:原子性(手术完全成功或失败,它没有离开部分数据),一致性(一旦应用程序执行一个操作,操作的结果是可见的在每个后续操作),隔离(由一个用户一个不完整的操作不会引起意想不到的副作用为其他用户),和持久性(一个操作完成后它将被保留下来即使面对机器或系统故障)。长期以来,人们一直期望数据库系统将这些特性作为其事务功能的一部分。
在Hive 0.13之前,原子性、一致性和持久性都是在分区级别上提供的。可以通过打开一个可用的锁定机制(ZooKeeper或内存中)来提供隔离。通过在Hive 0.13中添加事务,现在可以在行级提供完整的ACID语义,这样一个应用程序可以添加行,而另一个应用程序可以从相同的分区读取,而不会相互干扰。
使用ACID语义的事务已经被添加到Hive中,以解决以下用例:
数据流摄取。许多用户都有Apache Flume、Apache Storm或Apache Kafka这样的工具,他们使用这些工具将数据流传输到Hadoop集群中。虽然这些工具可以以每秒数百行或更多行的速度写入数据,但Hive只能每15分钟到1小时添加一次分区。添加分区通常会很快导致表中分区数量过多。这些工具可以将数据流传输到现有的分区中,但这会导致读取器进行脏读(即,在开始查询之后会看到写入的数据),并在目录中留下许多小文件,从而对NameNode造成压力。有了这个新功能,这个用例将得到支持,同时允许读者获得一致的数据视图,并避免过多的文件。
缓慢变化维度。在典型的星型模式数据仓库中,维度表会随着时间缓慢变化。例如,零售商将开设新商店,需要将其添加到stores表中,或者现有商店可能更改其面积或其他跟踪特征。这些更改导致插入单个记录或更新记录(取决于所选择的策略)。从0.14开始,Hive就能够支持这一点。
数据重述。有时收集的数据被发现是不正确的,需要纠正。或者,数据的第一个实例可能是一个近似值(90%的服务器报告),稍后提供完整的数据。或者,业务规则可能要求由于后续的事务而重复某些事务(例如,在购买之后,客户可能购买了会员资格,因此有权享受折扣价格,包括之前的购买)。或者,根据合同,用户可能需要在关系终止时删除其客户的数据。从Hive 0.14开始,可以通过插入、更新和删除来支持这些用例。
使用SQL MERGE语句进行批量更新。
Limitations:
1.还不支持开始、提交和回滚。所有的语言操作都是自动提交的。计划在未来的版本中支持这些功能。
2.在第一个版本中只支持ORC文件格式。该特性的构建使得事务可以被任何存储格式使用,这些格式可以决定更新或删除如何应用于基本记录(基本上,这些记录有显式或隐式的行id),但到目前为止,集成工作只针对ORC完成。
3.默认情况下,事务被配置为off。请参阅下面的配置部分,以讨论需要设置哪些值来配置它。
4.要使用这些特性,表必须被封装起来。在同一个系统中不使用事务和ACID的表不需要被反包。外部表不能成为ACID表,因为外部表上的更改超出了压实器(hif -13175)的控制范围。
5.不允许从非ACID会话中读取/写入ACID表。换句话说,Hive事务管理器必须设置为org.apache.hadoop.hive.ql.lockmgr。DbTxnManager以便与ACID表一起工作。
6.此时,只支持快照级别隔离。当一个给定的查询开始时,将向它提供数据的一致快照。不支持脏读、提交读、可重复读或可序列化。通过引入BEGIN,目的是在事务持续期间支持快照隔离,而不仅仅是单个查询。可以根据用户请求添加其他隔离级别。
7.现有的ZooKeeper和内存锁管理器与事务不兼容。我们无意解决这个问题。有关如何为事务存储锁的讨论,请参阅下面的基本设计。
8.使用Oracle作为Metastore DB和datanucleus。connectionPoolingType=BONECP"可能会产生间歇的"没有这样的锁…"和"没有这样的事务…"错误。datanucleus设置”。在这种情况下,建议使用connectionPoolingType=DBCP。
8.加载数据…事务表不支持语句。(这直到HIVE-16732才被正确执行)
方法1:
hive更新用overwrite关检词可以做,也可以做拉链,前提是你的数据量要小,每天新增数据量可控,不然速度超级慢,最好的方式就是不处理,因为有分区的存在,每次选取分区时间最近的,也就相当于做了一个拉链,不考虑性能可以用overwrite
拉链表参考:https://blog.csdn.net/weixin_40444678/article/details/81083614
方法2:
参考:https://www.cnblogs.com/chengjunhao/p/9759452.html
打开CDH,
粘贴xml配置保存,服务端,客户端,都需要更新
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.enforce.bucketing</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value>1</value>
</property>
<property>
<name>hive.in.test</name>
<value>true</value>
</property>
上一篇: 用Golang写一个搜索引擎(0x06)--- 索引构建
下一篇: hive on spark
推荐阅读
-
SQL Server中的XML数据进行insert、update、delete操作实现代码
-
在Sql Server触发器中判断操作是Insert还是Update还是Delete
-
SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)
-
ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
-
轻量ORM-SqlRepoEx (四)INSERT、UPDATE、DELETE 语句
-
SQL基础语法的单表操作 select|insert|update|delete(增删改查) 简单使用
-
MSSQL2005 INSERT,UPDATE,DELETE 之OUTPUT子句使用实例
-
T-SQL基本语句使用,select语法、insert语法、update语法、delete语法
-
hive支持sql大全(9-11:复合类型构建操作/复杂类型访问操作/复杂类型长度统计函数)
-
SQL Server中的XML数据进行insert、update、delete