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

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

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

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

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

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

【问题讨论】:

    标签: hive hiveql 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://stackoverflow.com/a/55805764/2700344

    【讨论】:

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