1

使用 Hive 仅插入事务表的具体好处是什么?大多数文档只是表明如果您不需要删除或更改功能,则创建此表。这会加快处理速度吗?减少开销?

4

2 回答 2

0

目前,完整的 ACID 表仅支持 ORC 文件格式。微管理,也就是仅 INSERT 事务表支持任何其他存储格式。

因此,如果您将所有表都存储为 ORC 格式,则可以继续使用完整的 ACID。如果您有其他存储类型,并且您需要能够执行 INSERT 语句,那么微托管表可以帮助您。

另外:对于完整的 ACID 表,压缩由 MapReduce 作业完成。您可以将 Hive 配置为使用基于查询的压缩器进行主要压缩(如在创建新基础时),但次要压缩(如在合并 delta 文件中)仍然使用 MR 完成,并且仅使用 MR。对于微管理表,压缩是基于查询的。因此,如果您在 Tez 上使用 Hive,或者在 Spark 上使用 Hive,并且您根本不想拥有 MR,那很好。但是对于完整的 ACID 表,如果您想要较小的压缩,则需要 MapReduce。

内幕消息:基于查询的完整 ACID 表的次要压缩将很快得到支持,我很确定 Parquet 很快就会支持 ACID 表。

于 2019-11-07T13:51:56.287 回答
0

您在各处看到的是,与完整的事务表不同,“仅插入事务表”仅支持数据插入操作。

但这并没有说太多。想知道的是:什么是事务性插入操作?

说一个操作是一个事务基本上意味着它遵循 ACID 原则,尤其是它最重要的属性:原子性(ACID 中的 A)。在他的伟大著作《设计数据密集型应用程序》中,Martin Kleppmann 很好地解释了原子性属性:

“如果一个事务被中止,应用程序可以确保它没有改变任何东西,所以它可以安全地重试。错误中止事务并丢弃该事务的所有写入的能力是 ACID 原子性的定义特征。” 设计数据密集型应用程序,2017 年 3 月,第 1 版第 7 章,p。234

在 Hive 中,这是通过为每个插入事务创建一个增量目录来完成的,该目录使新数据保持隔离,直到事务完成。如果有错误目录被删除,否则,它被追加。

于 2020-11-02T21:39:28.760 回答