Hive 中的 NOLOCK 和 Impala

NOLOCK in Hive and Impala

我想了解为什么我们不在末尾使用 NOLOCK 关键字 SQL 查询 Impala、Hive 或 MySQL 中的 运行。例如,我在工作中通过 Cloudera workbench 同时使用 Hive 和 Impala。 Cloudera workbench 无法识别 NOLOCK 关键字。同样,我之前也使用过 MySQL 。即使在那里,NOLOCK 也不起作用。为什么我们不需要将 NOLOCK 与 Hive、Impala、MySQL 或 Big Query 一起使用?

免责声明:我想澄清一下,我对 NOLOCK 功能及其用例有一定的了解。这个问题与 SQL 不需要 NOLOCK 的风格有关。

首先要弄清楚什么是NOLOCK。 NOLOCK table 提示允许覆盖默认事务隔离级别(READ COMMITTED)。 NOLOCK = READ UNCOMMITTED 事务隔离级别,允许查询在提交正在更改数据的事务之前查看数据更改。

Hive does not support such isolation level (READ UNCOMMITTED) 即使在事务模式下。 Oracle 也不支持 READ UNCOMMITTED,因此在这些数据库中不需要 NOLOCK 提示。

在 Hive 中,您可以 turn off concurrency

进一步@leftjoin:

目前仅支持快照级隔离。当一个给定的查询开始时,它将提供一个一致的数据快照。不支持脏读、已提交读、可重复读或可序列化。引入 BEGIN 的目的是在事务期间支持快照隔离,而不仅仅是单个查询。可以根据用户请求添加其他隔离级别。

https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-Configuration