我无法理解此 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
命令仅更新 Metastore,而不是移动 HDFS 中的目录。
同样,如果您之后执行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
。
关于Apache 配置单元创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446998/