如何进行 Hive SQL IF/ELSE 查询?

Posted

技术标签:

【中文标题】如何进行 Hive SQL IF/ELSE 查询?【英文标题】:How to do Hive SQL IF/ELSE query? 【发布时间】:2021-01-26 17:16:12 【问题描述】:

在我想要做的 Hive SQL 脚本中:

如果 $user_choice = 1 从表 1 中选择 a、b、c; 别的 从表 1 中选择 d,e,f;

其中 user_choice 是 Hive 在运行查询时提示输入的参数。

请问正确的语法是什么?或者如果我想错了,还有其他方法可以实现同样的目标吗?

我正在尝试通过 Hue 编辑器执行此操作,如果这会有所不同的话。 谢谢

【问题讨论】:

【参考方案1】:

如果列类型相同,可以在 Hive 中使用 CASE 语句或 UNION ALL:

SELECT 
      case when $user_choice = 1 the a else d end col1 
      case when $user_choice = 1 the b else e end col2 
      case when $user_choice = 1 the c else f end col3 
  FROM table1;

SELECT  a, b, c FROM table1 WHERE $user_choice = 1
UNION ALL
SELECT  d, e, f FROM table1 WHERE $user_choice = 2

如果列的数据类型不同,或者脚本完全不同,则从 shell 调用 hive

if if [[ $user_choice  == "1" ]] ; then 
  hive -e "query one"
else 
  hive -e "query two" 
fi

列名也可以参数化:https://***.com/a/55805764/2700344

【讨论】:

这很有帮助,谢谢。请提出几个问题: 1.) 我的列类型相同,但在第二个用户选项的情况下,我想显示第一个用户选项显示的所有列的子集。我已经使用了上面的 UNION ALL 方法,但想在第二个选项中隐藏未使用的列,我可以管理的最接近的是将列指定为“SELECT null AS column_name”,但是是否可以在 SELECT 中指定一个列(到使 UNION ALL 工作),然后将其从输出中隐藏? 2.) 使用脚本选项,我必须使用 Hue 和 Oozie,我想在 Oozie 工作流程中我会有一个脚本操作,但我是否还需要一个决策节点和其他节点分支到我的完整或部分查询,或者脚本会处理决策和分支,因此工作流将仅包含一个运行脚本的节点?再次感谢。

以上是关于如何进行 Hive SQL IF/ELSE 查询?的主要内容,如果未能解决你的问题,请参考以下文章

用于sql查询的IF、ELSE语句

如何在 SQL 查询中动态跳过没有 If else 的 where 子句?

如何在 SQL 中编写 if else if 条件 |甲骨文 |

在 sql 查询中使用 if/else

oracle报告IF ELSE中的sql查询条件

在 PHP 中使用 if / else 检查 SQL 查询