簡體   English   中英

Hive case when 子句效率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM