我很难理解这个apache配置单元代码背后的真正含义,有人能向我解释一下这个代码是否真的在做什么吗?
ALTER TABLE a RENAME TO a_tmp; DROP TABLE a; CREATE TABLE a AS SELECT * FROM a_tmp;
3lxsmp7m1#
ALTER TABLE a RENAME TO a_tmp;
这只允许您重命名表 a 至 a_tmp .假设你的table a 最初指向 /user/hive/warehouse/a ,则执行此命令后,数据将移动到 /user/hive/warehouse/a_tmp 以及 /user/hive/warehouse/a 将不复存在。请注意,这种移动hdfs目录的行为只存在于较新版本的配置单元中。在那之前 RENAME 命令只是更新元存储,而不是移动hdfs中的目录。同样,如果你 show tables 以后,你会看到的 a 已经不存在了,但是 a_tmp 存在。您不能再查询 a 因为它不再在元存储中注册。
a
a_tmp
/user/hive/warehouse/a
/user/hive/warehouse/a_tmp
RENAME
show tables
DROP TABLE a;
这基本上什么都不做,因为您已经重命名了 a 至 a_tmp . 所以呢 a 在元存储中不再存在。这仍然会打印“确定”,因为没有什么可做的。
CREATE TABLE a AS SELECT * FROM a_tmp;
您要求创建一个名为 a 并在元存储中注册它。您还要求用中的相同数据填充它 a_tmp (您已经从中复制了 a 之前)简言之,您将初始表移动到一个新表,然后将新表复制回原始表,因此这些查询所做的唯一事情就是将初始数据复制到这两个表中 a 以及 a_tmp .
1条答案
按热度按时间3lxsmp7m1#
这只允许您重命名表
a
至a_tmp
.假设你的table
a
最初指向/user/hive/warehouse/a
,则执行此命令后,数据将移动到/user/hive/warehouse/a_tmp
以及/user/hive/warehouse/a
将不复存在。请注意,这种移动hdfs目录的行为只存在于较新版本的配置单元中。在那之前RENAME
命令只是更新元存储,而不是移动hdfs中的目录。同样,如果你
show tables
以后,你会看到的a
已经不存在了,但是a_tmp
存在。您不能再查询a
因为它不再在元存储中注册。这基本上什么都不做,因为您已经重命名了
a
至a_tmp
. 所以呢a
在元存储中不再存在。这仍然会打印“确定”,因为没有什么可做的。您要求创建一个名为
a
并在元存储中注册它。您还要求用中的相同数据填充它a_tmp
(您已经从中复制了a
之前)简言之,您将初始表移动到一个新表,然后将新表复制回原始表,因此这些查询所做的唯一事情就是将初始数据复制到这两个表中
a
以及a_tmp
.