2016-06-28 156 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