Hive 3 ACID事务
Hive 3通过使用涉及增量文件的写入,读取,插入,创建,删除和更新操作中的技术实现事务性表的原子性和隔离操作,这些操作可以提供查询状态信息并帮助您解决查询问题。
写入和读取操作
Hive 3写入和读取操作改进了事务表的ACID属性和性能。事务表与其他表一样执行。Hive支持所有TPC Benchmark DS(TPC-DS)查询。
Hive 3及更高版本通过简单的写入和插入扩展了原子操作,以支持以下操作:
写入多个分区
在单个SELECT语句中使用多个insert子句
单个语句可以写入多个分区或多个表。如果操作失败,则用户看不到部分写入或插入。即使数据经常变化,操作仍然保持高效,例如每小时百分之一。Hive 3及更高版本不会覆盖整个分区以执行更新或删除操作。
读取语义包括快照隔离。当读取操作开始时,Hive在逻辑上锁定仓库的状态。读操作不受操作期间发生的更改的影响。
仅插入表中的原子性和隔离
当仅插入事务开始时,事务管理器获取事务ID。对于每次写入,事务管理器都会分配写入ID。此ID确定实际写入数据的路径。以下代码显示了仅插入事务表的架构:
CREATE TABLE tm (a int, b int) TBLPROPERTIES
('transactional'='true',
'transactional_properties'='insert_only');
假设发生了三次插入操作,第二次操作失败:
INSERT INTO tm VALUES(1,1);
INSERT INTO tm