DROP PARTITION是否从HIVE中的外部表中删除数据?

时间:2016-07-12 01:11:48

标签: hive external-tables hive-partitions

HIVE中的外部表按年,月和日进行分区。

以下查询是否从外部表中删除此查询中引用的特定分区的数据?: -

ALTER TABLE MyTable DROP IF EXISTS PARTITION(year=2016,month=7,day=11);

2 个答案:

答案 0 :(得分:3)

分区方案不是数据。分区方案是存储在元数据中的表DDL的一部分(简单地说:分区键值+存储数据文件的位置)。

数据本身存储在分区位置(文件夹)的文件中。 如果删除外部表的分区,则该位置保持不变,但是已卸载为分区(删除了有关此分区的元数据)。您可以卸载几个版本的分区位置(例如以前的版本)。

您可以删除分区并将另一个位置安装为分区(alter table add partition)或更改现有分区位置。删除外部表也不会删除包含文件的表/分区文件夹。之后您可以在此位置创建表格。

看一下这个答案,以便更好地理解外部表/分区概念:It is possible to create many tables (both managed and external at the same time) on top of the same location in HDFS.

答案 1 :(得分:1)

没有外部表只有将被删除的引用,实际文件仍将保留在位置。

外部表数据文件不归表所有,也不移动到配置单元仓库目录

只会从hive Metastore表中删除PARTITION meta ..

内部与外部的区别外部表:

对于外部表 -

外部表将文件存储在HDFS服务器上,但表格未完全链接到源文件。

如果删除外部表,该文件仍保留在HDFS服务器上。

例如,如果您在HIVE中使用HIVE-QL创建一个名为“table_test”的外部表并将该表链接到文件“file”,则从HIVE中删除“table_test”将不会从HDFS中删除“文件”。

任何有权访问HDFS文件结构的人都可以访问外部表文件,因此需要在HDFS文件/文件夹级别管理安全性。

在主节点上维护元数据并从HIVE中删除外部表,仅删除元数据而不删除数据/文件。

内部表 -

根据hive.metastore.warehouse.dir中的设置存储在目录中,默认情况下,内部表存储在以下目录“/ user / hive / warehouse”中,您可以通过更新配置文件中的位置来更改它。     删除表会删除元数据&来自主节点和HDFS的数据。     内部表文件安全性仅通过HIVE控制。需要在HIVE内部管理安全性,可能在模式级别(取决于组织到组织)。

Hive可能有内部或外部表,这是影响数据加载,控制和管理方式的选择。

在以下情况下使用EXTERNAL表:

数据也在Hive之外使用。例如,数据文件由不锁定文件的现有程序读取和处理。     即使在DROP TABLE之后,数据也需要保留在底层位置。如果您将多个模式(表或视图)指向单个数据集,或者您正在迭代各种可能的模式,则可以应用此方法。     Hive不应该拥有数据和控制设置,dirs等,你可能有另一个程序或进程来做这些事情。     您不是基于现有表(AS SELECT)创建表。

在以下情况下使用INTERNAL表:

数据是暂时的。    您希望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               |