![](/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.