2015-02-23 38 views
0

我已經給出了RDBMS中完美工作的更新聲明,但未在HIVE中工作。目前在HIVE,你不能有多個表的基準(如查詢表表A,表B中引用)HIVE更新聲明中的多表引用

UPDATE A 
FROM TableA A, TableB B 
SET DepartmentId = B.DepartmentId 
WHERE A.CustomerId = B.CustomerId ; 

我需要你對我怎樣才能實現HIVE相同的幫助? HIVE中可能的替代方案?

回答

0

Hive表是不可變的。所以更新是不可能的。你總是可以重寫整個表:

CREATE TABLE TableA_new 
AS 
SELECT A.c1,A.c2, ... , B.DepartmentId , .. 
FROM TableA A, TableB B 
WHERE A.CustomerId = B.CustomerId ; 

回答部分是真實的,更新可從HIVE 0.14;)GL

+0

我指的是事務支持自Hive 0.14以來的行級可用。請參閱[HIVE更新](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Update)。你指的是CREATE TABLE AS ..這不是我正在談論的情況.... – Sanjiv 2015-02-23 10:02:44

1

由於蜂巢不支持行級刀片和很少有解決方法的更新。上面提到的答案就是這樣。 一種方法是做同樣的事情,並再次將覆蓋插入到同一個表中。

INSERT OVERWRITE表A SELECT A.c1,A.c2,...,B.DepartmentId,.. FROM表A A,表B乙 WHERE A.CustomerId = B.CustomerId;

這將會像更新同一張表一樣。

+0

請參閱https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Update – Sanjiv 2015-02-23 10:22:00