0

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

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

4

2 回答 2

2

首先,让我们澄清一下什么是NOLOCK。NOLOCK 表提示允许覆盖默认事务隔离级别(READ COMMITTED)。NOLOCK = READ UNCOMMITTED事务隔离级别,允许查询在提交更改数据的事务之前查看数据更改。

READ UNCOMMITTED即使在事务模式下,Hive 也不支持这种隔离级别( )。Oracle 也不支持READ UNCOMMITTED,所以不需要NOLOCK在这些数据库中提示。

在 Hive 中,您可以关闭并发

于 2022-02-03T14:42:39.940 回答
0

除了@leftjoin:

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

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

于 2022-02-03T20:48:40.217 回答