HIVE中的外部表按年、月、日进行分区。
那么,下面的查询是否从外部表中删除此查询中引用的特定分区的数据?:-
ALTER TABLE MyTable DROP IF EXISTS PARTITION(year=2016,month=7,day=11);
发布于 2016-07-23 02:08:57
分区方案不是数据。分区方案是存储在元数据中的表DDL的一部分(简单地说:分区键值+存储数据文件的位置)。
数据本身存储在分区位置(文件夹)的文件中。如果您删除外部表的分区,则该位置保持不变,但作为分区卸载(有关此分区的元数据将被删除)。您可以有几个版本的分区位置被卸载(例如以前的版本)。
您可以删除分区并挂载另一个位置作为分区(alter table add partition)或更改现有分区位置。drop external table请勿删除包含文件的表/分区文件夹。稍后,您可以在此位置上创建表。
为了更好地理解外部表/分区的概念,请看下面的答案:It is possible to create many tables (both managed and external at the same time) on top of the same location in HDFS.
发布于 2016-07-12 14:30:14
没有外部表,只有将被删除的引用,实际文件仍将保留在该位置。
外部表数据文件不归表所有,也不会移动到配置单元仓库目录
仅分区元将从配置单元元存储表中删除。
内外表的差异:
用于外部表的 -
外部表将文件存储在HDFS服务器上,但表并未完全链接到源文件。
如果删除外部表,文件仍保留在HDFS服务器上。
例如,如果您使用HIVE-QL在HIVE中创建了一个名为“table_test”的外部表,并将该表链接到文件“file”,那么从HIVE中删除“table_test”不会从HDFS中删除“file”。
有权访问HDFS文件结构的任何人都可以访问外部表文件,因此需要在HDFS文件/文件夹级别管理安全性。
元数据在主节点上维护,从配置单元中删除外部表,仅删除元数据,而不删除数据/文件。
内部表的-
内部表存储在基于hive.metastore.warehouse.dir中设置的目录中,默认情况下,内部表存储在以下目录“/user/hive/warehouse”中。您可以通过更新配置文件中的位置来更改它。删除表将分别删除主节点和HDFS中的元数据和数据。内部表文件安全性仅通过配置单元进行控制。安全性需要在配置单元中进行管理,可能是在模式级别(取决于组织和组织)。
配置单元可能有内部表或外部表这是一个影响数据加载、控制和管理方式的选择。
在以下情况下使用外部表:
这些数据也可以在Hive之外使用。例如,数据文件由不锁定文件的现有程序读取和处理。即使在DROP TABLE之后,数据也需要保留在底层位置。如果您将多个模式(表或视图)指向单个数据集,或者您正在迭代各种可能的模式,则这一点可能适用。配置单元不应拥有数据和控件设置、目录等,您可能有另一个程序或进程来执行这些操作。您没有基于现有表(AS SELECT)创建表。
在以下情况下使用内部表:
数据是临时的。您希望Hive完全管理表和数据的生命周期。
注意:如果您要查看数据库(已配置的details),请使用元表
|BUCKETING_COLS |
| COLUMNS |
| DBS |
| NUCLEUS_TABLES |
| PARTITIONS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SORT_COLS |
| TABLE_PARAMS |
| TBLS |
https://stackoverflow.com/questions/38318513
复制相似问题