我很难理解这段 Apache Hive 代码背后的真正含义,有人可以向我解释这段代码是否真的在做任何事情吗?
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 中的目录。
同样,如果你做一个show tables
之后,你会看到a
它不再存在,而是a_tmp
存在。此时您无法再查询a
,因为它不再在 Metastore 中注册。
DROP TABLE a;
这基本上没有任何作用,因为您已经重命名a
为a_tmp
. 因此a
元存储中不再存在。这仍然会打印“OK”,因为无事可做。
CREATE TABLE a AS SELECT * FROM a_tmp;
您要求创建一个名为的全新表a
并将其注册到元存储中。您还要求使用其中相同的数据填充它a_tmp
(您已经从之前复制a
过)
因此,简而言之,您将初始表移动到新表,然后将新表复制回原始表,因此这些查询所做的唯一事情是将初始数据复制到a
anda_tmp
中。