【问题标题】:NOLOCK in Hive and ImpalaHive 和 Impala 中的 NOLOCK
【发布时间】:2022-02-04 04:48:40
【问题描述】:

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

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

【问题讨论】:

    标签: mysql hive google-bigquery acid nolock


    【解决方案1】:

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

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

    在 Hive 中,您可以turn off concurrency

    【讨论】:

    • 感谢您的回复。这是否意味着 Hive 和 Oracle 只读取已提交的数据?如果为真,未提交的数据到哪里去了?
    • @Excel-lit 他们不支持它的事实并不意味着他们具有相似的架构。 Hive 不支持回滚和提交(都是自动提交的)。它可以失败或成功,支持快照隔离。在 Oracle 中,未提交的更改应用于数据,重做日志用于支持隔离和恢复docs.oracle.com/cd/E18283_01/server.112/e17120/…
    【解决方案2】:

    进一步@leftjoin:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      相关资源
      最近更新 更多