关键点:
ARCHIVE/UNARCHIVE/TRUNCATE/MERGE/CONCATENATE命令只能在内部表上进行使用;
DROP操作将会删除内部表的元数据及数据信息,而对于外部表则仅仅删除元数据信息;
ACID的事务特性仅仅适用于内部表; 查询结果缓存只适用于内部表;
外部表的表约束只支持RELY操作;
一些物化视图的特性只适用于内部表;
hive中表的两种基本类型
1)、内部表(managed)--默认
2)、外部表(external)
本文将介绍内部表及外部表的一些差异点,不过hive中内部表与外部表根本的差异在于表是否拥有自己的数据。
这意味着表数据以及表属性只能通过hive的命令进行更改,而实际上因为数据文件保存在文件系统上,任何有权限的人都有可能绕过hive对其作出更改,如果更改操作违反了hive对文件要求的不变性及hive对文件格式和内容的期望,则最终hive返回的结果很有可能是用户所不希望看到的;
内部表的另一个特性是数据都追加到hive实体中,举例来说,每当改变hive实体数据时,其对应的数据也将发生改变。这与传统的RDBMS非常类似--更改数据库数据都是基于SQL的访问权限来操作而非直接修改数据文件;
而对于外部表,hive认为其不管理数据;
使用上可以通过使用命令查看表的详细信息:
hive> desc formatted table_name;
- 1
其中一项table type指明了当前表类型是MANAGED_TABLE还是EXTERNAL_TABLE ;
内部表与外部表存在以下但不完全的特性差异:
ARCHIVE/UNARCHIVE

Hive中的内部表和外部表在使用上有显著区别。内部表的元数据和数据在`hive.metastore.warehouse.dir`指定的目录下,`DROP`操作会删除元数据和数据。而外部表仅删除元数据,数据保留,适合于外部进程管理。内部表支持ARCHIVE等操作,适用于ACID事务和查询缓存,外部表则适合已存在的或远程的数据,且元数据可以更新。
最低0.47元/天 解锁文章
393

被折叠的 条评论
为什么被折叠?



