【问题标题】:Hive : Multiple In-elements with single subqueryHive:具有单个子查询的多个 In-elements
【发布时间】:2016-04-23 11:45:44
【问题描述】:

我试图在 hive(版本 1.2.1)上运行这样的查询:

DELETE  FROM employee as e WHERE  (e.id, e.name) IN ( SELECT emp.id, emp.name FROM employee_final  emp) AND e.sno = 120 ;

但由于 hive 不支持这种结构,所以我尝试了这个:

DELETE FROM employee WHERE 
id  IN (  SELECT emp.id  FROM employee_final AS  emp ) 
AND 
name IN ( SELECT emp.name  FROM employee_final AS  emp      )  
AND e.sno = 120 ;

但 hive 似乎有一个限制,它只支持 1 个子查询,我遇到了这样的异常

错误消息:语法不正确的 SQL 查询:];嵌套的 异常是 org.apache.hive.service.cli.HiveSQLException: Error while 编译语句:失败:SemanticException [错误 10249]:行 1:185 不支持的子查询表达式“名称”:只有 1 个子查询 支持表达式。

处理这个问题最有效的方法是什么。

【问题讨论】:

    标签: hive subquery in-subquery


    【解决方案1】:

    你可以试试关注

    1. 通过 EXISTS 我不确定 HIVE 是否支持这种子查询表单。

      DELETE FROM employee as e WHERE EXISTS ( SELECT 1 FROM employee_final emp where e.id = emp.id and e.name =  emp.name ) AND e.sno = 120 ;
      
    2. 通过CONCAT函数

      DELETE FROM employee as e WHERE concat (e.id, '#' ,e.name) IN ( SELECT concat (emp.id,'#' ,emp.name) FROM employee_final emp) AND e.sno = 120 ;
      

    【讨论】:

    • CONCAT 函数仅在其中 1 列是表的主键的情况下才有用。因为这将确保唯一性。
    • 你不需要相同的主键
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2021-01-29
    相关资源
    最近更新 更多