2016-06-28 116 views
0

我想从一个表其列c是比列的最大值更大Ç表B中删除表无法正常工作

的删除行我试过

delete * from A 
where A.p >= (select max(t.c) from B t) 

,但它无法正常工作。我怎样才能做到这一点?

回答

1

的INSERT ... VALUES,UPDATE和DELETE语句需要蜂房的site.xml配置文件中的下列属性值:

hive.enforce.bucketing    true 

hive.exec.dynamic.partition.mode nonstrict 

在相应的蜂房site.xml的更新配置后,重新启动服务 - HiveServer2和Hive Metastore。

然后,用这个的HQL

delete from A 
where A.p >= (select max(t.c) from B t) 
+1

你在说什么版本的蜂巢? – MysticForce

+1

从Hive版本0.14.0开始:INSERT ... VALUES,UPDATE和DELETE现在可用于完整的ACID支持。 –

1

有几个问题在这里:

  1. DELETE support本身可从蜂巢0.14才刚刚开始。
  2. DELETE语法不应包含星号(“*”)。请参阅官方Hive Delete syntax

  3. 同样如MysticForce正确指出的那样,where子句中的子查询只支持IN,NOT IN,EXISTS,NOT EXISTS语句。请参阅Subqueries syntax in manual

+1

子查询是否可以在Hive中的where子句中工作而不具有关联性? – MysticForce

+0

@MysticForce - 使用的子查询不是“相关的子查询”。根据定义,相关子查询是使用来自外部查询的值的子查询(嵌套在另一个查询中的查询)。在此示例中,子查询不使用外部查询中的任何值。它所做的就是独立计算MAX值。 – janeshs

+1

where子句中的子查询只支持IN,NOT IN,exists,not exists语句。请参考https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries – MysticForce