Hive外部表\内部表关联数据

CREATE TABLE page_view(
     viewTime INT, 
     userid BIGINT,
     page_url STRING, 
     referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS TEXTFILE;

这里创建了表page_view,有表的注释,一个字段ip的注释,分区有两列,分别是dt和country。
[ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符。
不同列之间用一个'\001'分割,

集合(例如array,map)的元素之间以'\002'隔开,

map中key和value用'\003'分割。

[STORED AS file_format]关键字是用来设置加载数据的数据类型,默认是TEXTFILE,如果文件数据是纯文本,就是使用 [STORED AS TEXTFILE],然后从本地直接拷贝到HDFS上,hive直接可以识别数据。

创建外部表

如果数据已经存在HDFS的'/user/Hadoop/warehouse/page_view'上了,如果想创建表,指向这个路径,就需要创建外部表:

CREATE EXTERNAL TABLE page_view(
     viewTime INT, 
     userid BIGINT,
     page_url STRING, 
     referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '/user/hadoop/warehouse/page_view';

创建表,有指定EXTERNAL就是外部表,没有指定就是内部表,内部表在drop的时候会从HDFS上删除数据,而外部表不会删除。

外部表和内部表一样,都可以有分区,如果指定了分区,那外部表建了之后,还要修改表添加分区。
外部表如果有分区,还可以加载数据,覆盖分区数据,但是外部表删除分区,对应分区的数据不会从HDFS上删除,而内部表会删除分区数据。

外部表关联数据

-- 这种需要先创建分区
use test;
alter table fct_path_list_off_5levels partition (date="2017-09-14") set location 'hdfs://nameservice1/user/hive/warehouse/test.db/fct_path_list_off_5levels/date=2017-09-14';


-- 创建分区的时候指定数据文件
use test;
alter table fct_path_list_off_5levels add partition (date="2017-09-14") location 'hdfs://nameservice1/user/hive/warehouse/test.db/fct_path_list_off_5levels/date=2017-09-14';

转载于:https://www.cnblogs.com/myblog1900/p/10031908.html

<think>嗯,用户想了解Hive内部表外部表的区别。我需要先回顾一下Hive的基本概念。内部表外部表数据存储和管理上有不同的行为。记得内部表数据Hive管理,删除表时会同时删除数据,而外部表只管理元数据,删除表不会影响数据文件。这可能和用户提到的引用内容有关,特别是引用[2]提到的外部表在删除后文件仍然保留。 接下来需要整理两者的主要区别,比如存储位置、删除行为、用途场景等。用户提供的引用[1]提到Hive和Parquet在模式处理上的差异,但可能和当前问题关联不大,不过引用[2]直接相关,应该引用。引用[3]关于TABLESAMPLE可能暂时用不上,但先留着。 需要确保回答结构清晰,按照用户的要求分点说明。同时,用户要求生成相关问题,所以得考虑常见疑问,比如使用场景、如何选择、数据恢复等。还要注意使用中文,LaTeX格式正确,但这个问题可能涉及较少数学公式,但如果有表达式也要正确处理。 检查是否有遗漏点,比如创建语法的区别,是否影响权限或其他Hive操作。可能还要提到EXTERNAL关键字的使用,以及是否可以通过ALTER TABLE转换类型。另外,内部表适用于临时数据,而外部表适合共享数据,比如与其他工具如Spark共用,避免误删数据。 最后,确保引用正确,引用[2]已经覆盖了外部表的关键点,其他引用可能不需要。总结时强调用户根据数据生命周期管理需求来选择表类型。</think>### Hive内部表外部表的区别 Hive内部表(Internal Table)和外部表(External Table)在数据存储、生命周期管理等方面有以下核心差异: --- #### 1. **数据存储位置与控制权** - **内部表**:数据文件默认存储在Hive的仓库目录(如`/user/hive/warehouse`),由Hive**全权管理**。创建语法无需指定`EXTERNAL`关键字。 - **外部表**:数据文件可存放在**任意HDFS路径**,由用户或外部系统管理。创建时需显式声明`EXTERNAL`关键字: ```sql CREATE EXTERNAL TABLE table_name (...) LOCATION '/path/to/data'; ``` --- #### 2. **删除表时的行为** - **内部表**:执行`DROP TABLE`时,**元数据(表结构)和底层数据文件会被同时删除**。 - **外部表**:执行`DROP TABLE`时,**仅删除元数据数据文件保留**。这适用于与其他系统(如Spark)共享数据的场景[^2]。 --- #### 3. **应用场景** - **内部表**:适合临时数据、中间表或生命周期完全由Hive控制的场景。 - **外部表**:适合已存在的数据(如日志文件)、需要多引擎共享的数据,或要求数据持久化的场景[^2]。 --- #### 4. **数据恢复特性** - 若误删**内部表**,数据通常无法直接恢复(需依赖备份); - **外部表**的数据始终独立存在,重建表后即可重新关联。 --- ### 选择建议 - 若需Hive**完全控制数据**,选内部表; - 若需**跨平台共享数据**或**避免误删风险**,选外部表。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值