繁体   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