3

我很难理解这段 Apache Hive 代码背后的真正含义,有人可以向我解释这段代码是否真的在做任何事情吗?

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

1 回答 1

4
ALTER TABLE a RENAME TO a_tmp;

这只是允许您将表重命名aa_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;

这基本上没有任何作用,因为您已经重命名aa_tmp. 因此a元存储中不再存在。这仍然会打印“OK”,因为无事可做。

CREATE TABLE a AS SELECT * FROM a_tmp;

您要求创建一个名为的全新表a并将其注册到元存储中。您还要求使用其中相同的数据填充它a_tmp(您已经从之前复制a过)

因此,简而言之,您将初始表移动到新表,然后将新表复制回原始表,因此这些查询所做的唯一事情是将初始数据复制到aanda_tmp中。

于 2013-01-21T21:49:47.020 回答