在 hive 0.14 中,我有一张支持ACID交易的表格。
create table HiveTest
(EmployeeID Int,FirstName String,Designation String,
Salary Int,Department String)
clustered by (department) into 3 buckets
stored as orc TBLPROPERTIES ('transactional'='true');
OK.i可以在此表中插入数据:
from stagingtbl
insert into table HiveTest
select employeeid,firstname,designation,salary,department;
但如果我不在这个表中使用存储桶:
create table HiveTest
(EmployeeID Int,FirstName String,Designation String,
Salary Int,Department String)
stored as orc TBLPROPERTIES ('transactional'='true');
插入数据时我会收到错误:表没有被删除。
所以我们必须在ACID事务支持中创建一个带有桶的表来插入数据吗? 我们可以使用任何其他方法在ACID支持的表中插入数据吗?
答案 0 :(得分:3)
正如Hive Transactions中的限制部分所述:
- 尚不支持BEGIN,COMMIT和ROLLBACK。所有语言操作都是自动提交。计划是在将来的版本中支持这些。
- 此第一个版本仅支持ORC文件格式。该功能已经构建,任何存储格式都可以使用事务来确定更新或删除如何应用于基本记录(基本上,它具有显式或隐式行ID),但到目前为止,只进行了集成工作。 ORC。
- 默认情况下,事务已配置为关闭。有关需要设置哪些值以进行配置的讨论,请参阅下面的“配置”部分。
- 必须对表格进行分区才能使用这些功能。不使用事务和ACID的同一系统中的表不需要被删除。
- 此时仅支持快照级别隔离。当给定查询启动时,将为其提供一致的数据快照。不支持脏读,读提交,可重复读或可序列化。随着BEGIN的引入,目的是在事务持续时间内支持快照隔离,而不仅仅是单个查询。根据用户请求,可以添加其他隔离级别。
- 现有的ZooKeeper和内存中锁定管理器与事务不兼容。无意解决这个问题。有关如何为事务存储锁的讨论,请参阅下面的基本设计。
答案 1 :(得分:0)
您使用的是哪个版本的Hive? Hive 0.13支持交易属性,但部分支持原子性,一致性和 Durabalility ,但不支持隔离。 Hive 0.14支持但仅限于分段表,表应存储为 ORC格式。确保在HIVE_HOME中配置hive-site.xml以支持并发和动态分区以及其他属性。