Улей случай, когда эффективность предложения - PullRequest
0 голосов
/ 06 мая 2020

Есть ли разница между:

select
  case some_calculation() 
  when 'a' then 1
  when 'b' then 2
  else 0
  end

и

select
  case
  when some_calculation() ='a' then 1
  when some_calculation() ='b' then 2
  else 0
  end

Я предполагаю, что во второй версии функция some_calculation() будет оцениваться дважды. Я не знаю, как это проверить. Мы будем благодарны за любой вклад.

1 Ответ

0 голосов
/ 06 мая 2020

Это плохо документировано в Hive. Но это хорошо понимается в стандартной и других базах данных.

Во второй версии some_calculation() определенно будет оцениваться несколько раз. Выражение case оценивается последовательно, поэтому второе when не оценивается, пока первое не будет равно false.

В первой версии значение должно оцениваться один раз.

Вы можно ощутить разницу, используя изменчивые функции, такие как random(). Этот db <> fiddle иллюстрирует разницу между двумя подходами. Первая версия никогда не возвращает NULL. Второй возвращает их много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...