2013-01-21 42 views
3

我有一個問題了解這個Apache Hive代碼背後的真正含義,有人請向我解釋這個代碼是否真的在做什麼?Apache配置單元創建表

ALTER TABLE a RENAME TO a_tmp; 
DROP TABLE a; 
CREATE TABLE a AS SELECT * FROM a_tmp; 

回答

4
ALTER TABLE a RENAME TO a_tmp; 

這只是讓你a重命名錶a_tmp

比方說,你的表a最初指向/user/hive/warehouse/a,然後執行此命令你的數據將被移動到/user/hive/warehouse/a_tmp/user/hive/warehouse/a將不復存在後的內容。請注意,移動HDFS目錄的這種行爲僅存在於更新版本的Hive中。在此之前,RENAME命令僅更新HDFS中的metastore而不是移動目錄。

同樣,如果你一個show tables後做,你會看到,a不存在了,但a_tmp存在。您不能再查詢a,因爲它不再註冊在Metastore中。

DROP TABLE a; 

這基本上什麼也不做,因爲你已經改名aa_tmp。所以a不再存在於metastore中。這仍然會打印出「OK」,因爲沒有任何事情可做。

CREATE TABLE a AS SELECT * FROM a_tmp; 

您要求創建一個名爲a的全新表格並將其註冊到Metastore中。你還要求與在a_tmp相同的數據(你已經從a之前複製)

因此,在短期你移動你的初始表到一個新的,然後再複製新一回填充它到原來的,所以這些查詢所做的唯一的事情就是將您的初始數據複製到aa_tmp

+0

好的,非常感謝 – user1653240

+0

值得注意的是,如果表最初有一些有趣的文件格式或SerDe或其他類似的東西,那麼這種類型的操作可以用來改變它,如果需要的話。 –

+0

可以說,如果您在s3中擁有原始表格,則可以通過重新創建表格移動到本地存儲區。 – oivoodoo