if-else 中的块语句

Posted

技术标签:

【中文标题】if-else 中的块语句【英文标题】:Block statements in if-else 【发布时间】:2013-05-29 07:19:40 【问题描述】:

Hive 支持条件语句 - https://cwiki.apache.org/Hive/languagemanual-udf.html#LanguageManualUDF-ConditionalFunctions

但是,我希望使用 block 条件语句。例如,我有两个表 A 和 B 具有相似的列(尽管列名不相同)。我希望从 A 和 B 创建一个新表,以便 B 具有更高的优先级。因此,如果 B 中存在一行,我希望从 B 中选择它,否则从 A 中选择该行。 即

SELECT 
IF (B.id<>NULL,
      (B.id as id,
       B.value1 as value),
      (A.id as id,
       a.value2 as value))
FROM A FULL OUTER JOIN B ON (A.id = B.id)

上述查询无效。是因为 Hive 不支持块条件语句吗?如何实现上述功能?

【问题讨论】:

【参考方案1】:

我不知道块条件语句,但这不会达到同样的效果:

select case when b.id is null then a.id else b.id end as id,
       case when b.id is null then a.value else b.value end as value
from a
full outer join b on ( a.id = b.id )

【讨论】:

是的,这是正确的。我也想出了这个。问题是大约有 10 列。我想知道是否有一种优雅的方式来编写这个而不是使用 10 个案例语句。谢谢! 您可能还会查看 Hive 的 struct() 类型,因此您可以只使用单个 case 语句:当 b.id 为 null 时选择 case 然后 struct(a.id, a.value) else struct( b.id, b.value) end as id_val ...不过你也想在这里回答我的问题:***.com/questions/16737914/…

以上是关于if-else 中的块语句的主要内容,如果未能解决你的问题,请参考以下文章

DB2/400 中的 if-else 语句

if-else 语句中的 GIF

减少 Java 中的 if-else 语句

条件判断语句(if-else)

switch 语句中的 String 如何比相应的 if-else 语句更有效?

“全栈2019”Java第二十二章:控制流程语句中的决策语句if-else