Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache配置单元创建表_Apache_Hadoop_Hive - Fatal编程技术网

Apache配置单元创建表

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

我很难理解这个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/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;