Hive外部表和外部表区别以及互相转换
作者头像
  • 悦普达
  • 2019-11-10 10:15:06 4

Hive建表语句

在Hive中,可以通过不同的关键字来创建不同类型的表。以下是创建表的基本语法:

sql CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT 'col_comment'], ...) [PARTITIONED BY (col_name data_type [COMMENT 'col_comment'], ...)] [COMMENT 'table_comment'] [WITH SERDEPROPERTIES ('key1'='value1', 'key2'='value2', ...)] [ [ROW FORMAT row_format] [STORED AS file_format] ] [LOCATION 'hdfs_path'] [TBLPROPERTIES ('key1'='value1', 'key2'='value2', ...)] [CACHED IN 'pool_name' [WITH REPLICATION = integer] | UNCACHED]

EXTERNAL 关键字用于区分内部表和外部表。LOCATION 参数指定了表数据的存储路径,默认情况下为Hive仓库路径。

外部表

创建外部表

sql CREATE EXTERNAL TABLE tableA(id int, name string) LOCATION '/user/appl/tmp/tableA';

外部表的数据存储路径默认为Hive仓库路径,如 /user/hive/warehouse/database.db/tableA/。删除外部表只会移除Hive中的元数据,而不会删除实际的数据文件。

内部表与外部表的区别

  • 主要区别:删除外部表只会删除Hive中的元数据,而不会删除实际的数据文件。内部表则会同时删除元数据和数据文件。
  • 选择建议:为了防止误删数据,建议优先使用外部表。

外部表与内部表的转换

外部表和内部表之间可以通过修改表属性进行相互转换,而不会因为数据量大而导致性能下降。转换操作不会影响数据的实际存储路径。

转换示例

```sql -- 将内部表转换为外部表 ALTER TABLE tableA SET TBLPROPERTIES('EXTERNAL'='true');

-- 将外部表转换为内部表 ALTER TABLE tableA SET TBLPROPERTIES('EXTERNAL'='false'); ```

表重命名与数据路径问题

当创建外部表时,如果没有指定路径,则数据路径默认为Hive仓库路径。如果重命名表,数据路径不会随之改变,这可能导致多个表共享同一个数据路径,从而引发问题。

例如,创建一个名为 table_1 的外部表,之后重命名该表为 table_111,此时表 table_111 和表 table_1 会共享同一个数据路径 /user/hive/warehouse/test.db/table_1

表备份与重命名

在备份表时,可以先将表转换为外部表,然后再进行重命名操作,以避免数据路径冲突。

查看表属性

可以通过执行 DESCRIBE EXTENDED tablename; 命令来查看表的详细属性。此命令在Impala和Hive中均可使用。

通过上述方法,可以有效地管理和备份Hive表,确保数据的安全性和一致性。

    本文来源:图灵汇
责任编辑: : 悦普达
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
外部互相区别转换以及Hive
    下一篇