![](/img/trans.png)
[英]How to include attribute created by CASE WHEN in the WHERE clause in HIVE?
[英]Hive case when clause efficiency
有沒有區別:
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()
function 將被評估兩次。 我不知道如何驗證。 任何輸入將不勝感激。
這在 Hive 中沒有詳細記錄。 但它在標准和其他數據庫中得到了很好的理解。
在第二個版本中, some_calculation()
肯定會被計算多次。 case
表達式是按順序計算的,因此第二個when
不會被計算,直到第一個計算結果為 false。
在第一個版本中,值應該被評估一次。
您可以通過使用 volatile 函數(例如random()
來了解差異。 這個 db<>fiddle說明了這兩種方法之間的區別。 第一個版本永遠不會返回NULL
。 第二個返回很多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.