放置分区是否从配置单元中的外部表中删除数据?

lb3vh1jj  于 2021-06-29  发布在  Hive
关注(0)|答案(2)|浏览(419)

配置单元中的外部表按年、月和日进行分区。
那么,以下查询是否从外部表中删除此查询中引用的特定分区的数据-

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

fsi0uk1n1#

分区方案不是数据。分区方案是存储在元数据中的表ddl的一部分(简单地说:分区键值+存储数据文件的位置)。
数据本身存储在分区位置(文件夹)的文件中。如果删除外部表的分区,则该位置保持不变,但作为分区卸载(关于该分区的元数据将被删除)。可以卸载几个版本的分区位置(例如以前的版本)。
您可以删除分区并挂载另一个位置作为分区(altertableaddpartition)或更改现有分区位置。同时删除外部表不要删除包含文件的表/分区文件夹。稍后您可以在此位置的顶部创建表。
为了更好地理解外部表/分区的概念,请看这个答案:可以在hdfs中的同一位置上创建多个表(同时是托管表和外部表)。

uujelgoq

uujelgoq2#

没有外部表只有将被删除的引用,实际文件仍将保留在该位置。
外部表数据文件不属于表,也不移动到配置单元仓库目录
只有分区元将从配置单元元存储表中删除。。
内外表的区别:
对于外部表-
外部表在hdfs服务器上存储文件,但表没有完全链接到源文件。
如果删除了外部表,则该文件仍保留在hdfs服务器上。
例如,如果您使用配置单元ql在配置单元中创建一个名为“table\u test”的外部表,并将该表链接到文件“file”,那么从配置单元中删除“table\u test”不会从hdfs中删除“file”。
任何有权访问hdfs文件结构的人都可以访问外部表文件,因此需要在hdfs文件/文件夹级别管理安全性。
元数据是在主节点上维护的,从配置单元中删除一个外部表时,只删除元数据而不删除数据/文件。
对于内部表格-
存储在基于hive.metastore.warehouse.dir中设置的目录中,默认情况下,内部表存储在以下目录“/user/hive/warehouse”中,您可以通过更新配置文件中的位置来更改它。删除表将分别从主节点和hdfs中删除元数据和数据。内部表文件安全仅通过配置单元控制。安全性需要在hive中进行管理,可能是在模式级别(取决于组织到组织)。
配置单元可能有内部或外部表这是一个影响数据加载、控制和管理方式的选择。
在下列情况下使用外部表:
数据也在Hive外使用。例如,数据文件由不锁定文件的现有程序读取和处理。即使在删除表之后,数据也需要保留在基础位置。如果您将多个模式(表或视图)指向一个数据集,或者迭代各种可能的模式,则可以应用这种方法。配置单元不应该拥有数据和控制设置、目录等,您可能有另一个程序或进程来执行这些操作。您没有基于现有表(如选择)创建表。
在下列情况下使用内部表:
数据是临时的。您希望hive完全管理表和数据的生命周期。
注意:元表,如果您将在数据库中查找(配置的详细信息)

|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               |

相关问题