Hive:具有单个子查询的多个 In-elements
Hive : Multiple In-elements with single subquery
我试图 运行 在配置单元(版本 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 ;
但是由于配置单元不支持这种构造,所以我尝试了这个:
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 个子查询,我遇到了这样的异常
Error Message : Grammatically incorrect SQL Query :]; nested
exception is org.apache.hive.service.cli.HiveSQLException: Error while
compiling statement: FAILED: SemanticException [Error 10249]: Line
1:185 Unsupported SubQuery Expression 'name': Only 1 SubQuery
expression is supported.
处理这个问题最有效的方法是什么。
您可以尝试关注
through 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 ;
通过 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 ;
我试图 运行 在配置单元(版本 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 ;
但是由于配置单元不支持这种构造,所以我尝试了这个:
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 个子查询,我遇到了这样的异常
Error Message : Grammatically incorrect SQL Query :]; nested exception is org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10249]: Line 1:185 Unsupported SubQuery Expression 'name': Only 1 SubQuery expression is supported.
处理这个问题最有效的方法是什么。
您可以尝试关注
through 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 ;
通过 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 ;