Apache配置单元创建表
我很难理解这个Apache Hive代码背后的真正含义,有人能向我解释一下这个代码是否真的在做什么吗Apache配置单元创建表,apache,hadoop,hive,Apache,Hadoop,Hive,我很难理解这个Apache Hive代码背后的真正含义,有人能向我解释一下这个代码是否真的在做什么吗 ALTER TABLE a RENAME TO a_tmp; DROP TABLE a; CREATE TABLE a AS SELECT * FROM a_tmp; 这只允许您将表a重命名为a\u tmp 假设您的表a最初指向/user/hive/warehouse/a,然后执行此命令后,您的数据将移动到/user/hive/warehouse/a\u tmp,并且/user/hive/wa
ALTER TABLE a RENAME TO a_tmp;
DROP TABLE a;
CREATE TABLE a AS SELECT * FROM a_tmp;
这只允许您将表a
重命名为a\u tmp
假设您的表a
最初指向/user/hive/warehouse/a
,然后执行此命令后,您的数据将移动到/user/hive/warehouse/a\u tmp
,并且/user/hive/warehouse/a
的内容将不再存在。请注意,这种移动HDFS目录的行为只存在于更新版本的配置单元中。在此之前,RENAME
命令只更新元存储,而不移动HDFS中的目录
类似地,如果在之后执行show tables
,您将看到a
不再存在,但是a_tmp
存在。此时您不能再查询a
,因为它不再在元存储中注册
DROP TABLE a;
这基本上没有什么作用,因为您已经将a
重命名为a\u tmp
。因此,a
不再存在于元存储中。这仍然会打印“OK”,因为没什么可做的
CREATE TABLE a AS SELECT * FROM a_tmp;
您要求创建一个名为a
的全新表,并在metastore中注册它。您还要求使用a_tmp
中的相同数据填充它(您之前已经从a
复制了这些数据)
简言之,您将初始表移动到一个新表,然后将新表复制回原始表,因此这些查询所做的唯一事情就是将初始数据复制到
a
和a_tmp
中,值得注意的是,如果表最初有一些有趣的文件格式,或者SerDe,或者其他类似的格式,如果需要的话,可以使用这种类型的操作来更改。假设您在s3中有原始表,您可以通过重新创建表来移动到本地存储。
CREATE TABLE a AS SELECT * FROM a_tmp;