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