Apache 配置单元创建表

标签 apache hadoop hive

我无法理解此 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 复制了它)

所以简而言之,您将初始表移动到一个新表,然后将新表复制回原始表,因此这些查询所做的唯一一件事就是将您的初始数据复制到两个 aa_tmp

关于Apache 配置单元创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446998/

相关文章:

php - 第一个破折号未被识别为分隔符

java - 带有 mod_jk 的 Apache/Tomcat 中的多个子域

hadoop - 使用 ElasticSearch 作为永久存储

hadoop - 如何在HDFS群集上增加dfs的空间

Hadoop/YARN 作业失败 - "exited with exitCode: -1000 due to: Could not find any valid local directory for nmPrivate..."

hadoop - 运行Hive时出错

hadoop - 无法从Spark-shell在Hive中创建新表

Apache 2.4 转发代理配置问题

hadoop - pig 拉丁编程

java - Android 媒体 HttpRequestHandler 的 Http 响应