我有一個問題了解這個Apache Hive代碼背後的真正含義,有人請向我解釋這個代碼是否真的在做什麼?Apache配置單元創建表
ALTER TABLE a RENAME TO a_tmp;
DROP TABLE a;
CREATE TABLE a AS SELECT * FROM a_tmp;
我有一個問題了解這個Apache Hive代碼背後的真正含義,有人請向我解釋這個代碼是否真的在做什麼?Apache配置單元創建表
ALTER TABLE a RENAME TO a_tmp;
DROP TABLE a;
CREATE TABLE a AS SELECT * FROM a_tmp;
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;
這基本上什麼也不做,因爲你已經改名a
到a_tmp
。所以a
不再存在於metastore中。這仍然會打印出「OK」,因爲沒有任何事情可做。
CREATE TABLE a AS SELECT * FROM a_tmp;
您要求創建一個名爲a
的全新表格並將其註冊到Metastore中。你還要求與在a_tmp
相同的數據(你已經從a
之前複製)
因此,在短期你移動你的初始表到一個新的,然後再複製新一回填充它到原來的,所以這些查詢所做的唯一的事情就是將您的初始數據複製到a
和a_tmp
。
好的,非常感謝 – user1653240
值得注意的是,如果表最初有一些有趣的文件格式或SerDe或其他類似的東西,那麼這種類型的操作可以用來改變它,如果需要的話。 –
可以說,如果您在s3中擁有原始表格,則可以通過重新創建表格移動到本地存儲區。 – oivoodoo