Я хочу понять, почему мы не используем ключевое слово NOLOCK в конце запросов SQL, которые выполняются в Impala, Hive или MySQL. Например, я использую на работе и Hive, и Impala через рабочую среду Cloudera. Cloudera Workbench не распознает ключевое слово NOLOCK. Точно так же я использовал MySQL и раньше. Даже там NOLOCK не сработает. Почему нам не нужно использовать NOLOCK с Hive, Impala, MySQL или Big Query?

Отказ от ответственности: я хочу уточнить, что у меня есть хорошее представление о функции NOLOCK и ее вариантах использования. Этот вопрос связан с разновидностями SQL, которые не требуют NOLOCK.

0
Excel-lit 3 Фев 2022 в 16:18

2 ответа

Лучший ответ

Прежде всего, давайте уточним, что такое НОЛОК. Табличная подсказка NOLOCK позволяет переопределить уровень изоляции транзакций по умолчанию (READ COMMITTED). NOLOCK = READ UNCOMMITTED уровень изоляции транзакций, который позволяет запросу видеть изменения данных перед фиксацией транзакции, изменяющей данные.

Hive не поддерживает такой уровень изоляции (READ UNCOMMITTED) даже в режиме транзакций. Oracle также не поддерживает READ UNCOMMITTED, поэтому в этих базах данных нет необходимости в подсказке NOLOCK.

В Hive вы можете отключить параллелизм.

2
leftjoin 3 Фев 2022 в 22:43
Спасибо за ваш ответ. Означает ли это, что Hive и Oracle читают только зафиксированные данные? Если это правда, куда идут незафиксированные данные?
 – 
Excel-lit
3 Фев 2022 в 21:21
@Excel-освещенный тот факт, что они его не поддерживают, не означает, что у них похожая архитектура. Hive не поддерживает откат и фиксацию (все автоматически фиксируются). Это может быть неудачно или успешно, поддерживается изоляция моментальных снимков. В Oracle незафиксированные изменения применяются к данным, а журнал повторов используется для поддержки изоляции и восстановления docs.oracle.com/cd/E18283_01/server.112/e17120/…
 – 
leftjoin
3 Фев 2022 в 21:31
См. также это: stackoverflow.com/a/63378038/2700344
 – 
leftjoin
3 Фев 2022 в 21:48

В дополнение к @leftjoin:

В настоящее время поддерживается только изоляция на уровне моментальных снимков. Когда данный запрос запускается, ему будет предоставлен согласованный снимок данных. Не поддерживается грязное чтение, зафиксированное чтение, повторяемое чтение или сериализуемое. С введением BEGIN цель состоит в том, чтобы поддерживать изоляцию моментальных снимков на время транзакции, а не только один запрос. Другие уровни изоляции могут быть добавлены в зависимости от запросов пользователей.

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

0
Greg Frair 3 Фев 2022 в 23:48