DROP PARTITION 是否从 HIVE 中的外部 table 删除数据?
Does DROP PARTITION delete data from external table in HIVE?
HIVE中的externaltable按年月日划分
下面的查询是否从 external table 中删除此查询中引用的 特定分区 的数据?:-
ALTER TABLE MyTable DROP IF EXISTS PARTITION(year=2016,month=7,day=11);
没有外部 table 只有将被删除的引用,实际文件仍将保留在位置。
外部 Table 数据文件不属于 table 也没有移动到 hive 仓库目录
只有 PARTITION 元将从配置单元元存储 tables..
中删除
内部和外部的区别 tables :
对于外部 Tables -
外部 table 将文件存储在 HDFS 服务器上,但 table 未完全 linked 到源文件。
如果删除外部 table 文件仍保留在 HDFS 服务器上。
例如,如果您使用 HIVE-QL 在 HIVE 中创建一个名为“table_test”的外部 table 并且 link table 将文件“file”,然后从 HIVE 中删除“table_test”不会从 HDFS 中删除“文件”。
任何有权访问 HDFS 文件结构的人都可以访问外部 table 文件,因此需要在 HDFS file/folder 级别管理安全性。
元数据在主节点上维护并从 HIVE 中删除外部 table,仅删除元数据而不是 data/file。
对于内部 Tables-
存储在基于hive.metastore.warehouse.dir中设置的目录中,默认情况下,内部table存储在以下目录“/user/hive/warehouse”中,您可以通过更新位置来更改它配置文件。
删除 table 会分别从主节点和 HDFS 中删除元数据和数据。
内部 table 文件安全性仅通过 HIVE 控制。安全性需要在 HIVE 中进行管理,可能在模式级别(取决于组织到组织)。
Hive 可能有内部或外部 tables,这是一个影响数据加载、控制和管理方式的选择。
在以下情况下使用外部 tables:
数据也在 Hive 之外使用。例如,数据文件由不锁定文件的现有程序读取和处理。
即使在 DROP TABLE 之后,数据也需要保留在底层位置。如果您将多个模式(tables 或视图)指向单个数据集,或者如果您正在遍历各种可能的模式,这可能适用。
Hive 不应该拥有数据和控制设置、目录等,您可能有另一个程序或进程来做这些事情。
您不是在现有 table (AS SELECT) 的基础上创建 table。
在以下情况下使用内部 tables:
数据是临时的。
您希望 Hive 完全管理 table 和数据的生命周期。
注意:Meta table 如果您要查看数据库(已配置 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 |
分区方案不是数据。分区方案是存储在元数据中的 table DDL 的一部分(简单地说:分区键值 + 数据文件的存储位置)。
数据本身存储在分区位置(文件夹)的文件中。 如果您删除外部 table 的分区,该位置保持不变,但作为分区卸载(有关该分区的元数据被删除)。 您可以卸载几个版本的分区位置(例如以前的版本)。
您可以删除分区并将另一个位置挂载为分区 (alter table add partition) 或更改现有分区位置。同时删除外部 table 不要删除包含文件的 table/partitions 文件夹。稍后您可以在此位置之上创建 table。
查看此答案以更好地理解外部 table/partition 概念:It is possible to create many tables (both managed and external at the same time) on top of the same location in HDFS.
HIVE中的externaltable按年月日划分
下面的查询是否从 external table 中删除此查询中引用的 特定分区 的数据?:-
ALTER TABLE MyTable DROP IF EXISTS PARTITION(year=2016,month=7,day=11);
没有外部 table 只有将被删除的引用,实际文件仍将保留在位置。
外部 Table 数据文件不属于 table 也没有移动到 hive 仓库目录
只有 PARTITION 元将从配置单元元存储 tables..
中删除内部和外部的区别 tables :
对于外部 Tables -
外部 table 将文件存储在 HDFS 服务器上,但 table 未完全 linked 到源文件。
如果删除外部 table 文件仍保留在 HDFS 服务器上。
例如,如果您使用 HIVE-QL 在 HIVE 中创建一个名为“table_test”的外部 table 并且 link table 将文件“file”,然后从 HIVE 中删除“table_test”不会从 HDFS 中删除“文件”。
任何有权访问 HDFS 文件结构的人都可以访问外部 table 文件,因此需要在 HDFS file/folder 级别管理安全性。
元数据在主节点上维护并从 HIVE 中删除外部 table,仅删除元数据而不是 data/file。
对于内部 Tables-
存储在基于hive.metastore.warehouse.dir中设置的目录中,默认情况下,内部table存储在以下目录“/user/hive/warehouse”中,您可以通过更新位置来更改它配置文件。 删除 table 会分别从主节点和 HDFS 中删除元数据和数据。 内部 table 文件安全性仅通过 HIVE 控制。安全性需要在 HIVE 中进行管理,可能在模式级别(取决于组织到组织)。
Hive 可能有内部或外部 tables,这是一个影响数据加载、控制和管理方式的选择。
在以下情况下使用外部 tables:
数据也在 Hive 之外使用。例如,数据文件由不锁定文件的现有程序读取和处理。 即使在 DROP TABLE 之后,数据也需要保留在底层位置。如果您将多个模式(tables 或视图)指向单个数据集,或者如果您正在遍历各种可能的模式,这可能适用。 Hive 不应该拥有数据和控制设置、目录等,您可能有另一个程序或进程来做这些事情。 您不是在现有 table (AS SELECT) 的基础上创建 table。
在以下情况下使用内部 tables:
数据是临时的。 您希望 Hive 完全管理 table 和数据的生命周期。
注意:Meta table 如果您要查看数据库(已配置 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 |
分区方案不是数据。分区方案是存储在元数据中的 table DDL 的一部分(简单地说:分区键值 + 数据文件的存储位置)。
数据本身存储在分区位置(文件夹)的文件中。 如果您删除外部 table 的分区,该位置保持不变,但作为分区卸载(有关该分区的元数据被删除)。 您可以卸载几个版本的分区位置(例如以前的版本)。
您可以删除分区并将另一个位置挂载为分区 (alter table add partition) 或更改现有分区位置。同时删除外部 table 不要删除包含文件的 table/partitions 文件夹。稍后您可以在此位置之上创建 table。
查看此答案以更好地理解外部 table/partition 概念:It is possible to create many tables (both managed and external at the same time) on top of the same location in HDFS.