配置单元仅插入事务表

m2xkgtsf  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(244)

使用配置单元只插入事务表的具体好处是什么?大多数文档只是指出,如果不需要删除或更改功能,那么就创建这个表。这会加快处理速度吗?减少开销?

yvgpqqbh

yvgpqqbh1#

目前,只有orc文件格式支持完整的acid表。微管理的,即只插入事务表支持任何其他存储格式。
所以,如果您的所有表都以orc格式存储,那么您可以继续使用full acid。如果您有其他存储类型,并且需要能够执行insert语句,那么微管理表可以在这方面提供帮助。
另外:对于完整的acid表,压缩是通过mapreduce作业完成的。您可以将配置单元配置为对主要压缩使用基于查询的压缩程序(如在创建新基时),但次要压缩(如在合并增量文件时)仍然使用mr和mr完成。对于微观管理的表,压缩是基于查询的。所以,如果你在tez上使用hive,或者在spark上使用hive,并且你根本不想拥有mr,那就好了。但是对于完整的acid表,如果需要较小的压缩,则需要mapreduce。
内幕提示:基于查询的小型压缩将很快得到支持,我很肯定parquet很快就会支持acid表。

rqmkfv5c

rqmkfv5c2#

到处都能看到的是,与完整的事务表不同,“仅插入事务表”只支持数据插入操作。
但这并不能说明什么。我们想知道的是:什么是事务性插入操作?
要说操作是事务,基本上意味着它遵循acid原则,尤其是它最重要的属性:原子性(acid中的a)。在他的著作《设计数据密集型应用程序》中,martin kleppmann很好地解释了原子性属性:
“如果事务被中止,应用程序可以确定它没有更改任何内容,因此可以安全地重试。在出现错误时中止事务并丢弃该事务中的所有写入操作的能力是acid原子性的定义特征。“Desiging data itensive applications,2017年3月,第1版第7章,p。234
在hive中,这是通过为每个insert事务创建一个delta目录来完成的,该目录在事务完成之前保持新数据的隔离。如果出现错误,则删除目录,否则追加目录。

相关问题