3

我试图在 hive (version 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:编译语句时出错:FAILED:SemanticException [错误 10249]:第 1:185 行不支持子查询表达式“名称”:仅支持 1 个子查询表达式。

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

4

1 回答 1

0

您可以尝试以下

  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 ;
    
于 2016-01-18T12:55:19.093 回答