hive中内、外部表以及修改表操作

本文详细介绍了Hive中的内部表和外部表,包括它们的创建、加载数据和区别。内部表在删除时会连同数据一起被删除,而外部表仅删除表定义,数据保留。此外,还讨论了临时表的使用和高阶建表语句,如CTAS、修改表名、注释、文件分隔符和列的相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive中内部表和外部表

hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。hive的数据表分为内部表跟外部表。

一、内部表(管理表)

HDFS中为所属数据库目录下的子文件夹。数据完全由Hive管理。删除表(元数据)会删除数据
创表语句:
create table if not exists studennt(
id int,
name string
)
row format delimited fields terminated by '\t'  -- 字段分割符
stored as textfile -- 文件格式
location '文件所在路径'-- 路径可以拿出来

如果建表时不指定路径
可以通过 LOAD DATA LOCAL INPATH ‘路径’ OVERWRITE INTO TABLE 表名;
local 可以有可无看数据存放在哪里
有local:从linux本地下获取数据,
无local:从hdfs上获取数据。
overwritre可替换
有overwrite:覆盖原有的数据
无overwrite:追加

二、外部表

数据保存在指定的HDFS路径中;hive不完全管理数据,删除表(元数据)不会删除数据
建表语句
create external table if not exists studennt(
id int,
name string
)
row format delimited fields terminated by '\t'  -- 字段分割符
stored as textfile -- 文件格式
location '文件所在路径'-- 路径可以拿出来

select * from table名;可以查看映射关系(数据表中的数据)

三、二者区别

  1. 表的存储位置
    内部表存在hdfs指定位置
    外部表存在外部,可以通过外部工具查看,例如sqlyog等等
  2. 在删除表的操作上
    内部表删除时会和原始数据一起删除
    外部表删除时,原始数据还在

四、补充临时表

除了内部表和外部表之外,还可以创建临时表
临时表是应用程序自动管理在复杂查询期间生成的中间数据的方法
1)表只对当前session有效,session退出后自动删除
2)表空间位于/tmp/hive-<user_name>(安全考虑)
3)如果创建的临时表表名已存在,实际用的是临时表

CREATE TEMPORARY TABLE 表名 (字段);
CREATE TEMPORARY TABLE 表名 AS..
CREATE TEMPORARY TABLE 表名 LIKE..

五、高阶建表语句

  1. CTAS – as select方式建表
CREATE TABLE 表名 as SELECT * FROM表名;

ps: CTAS不能创建 partition, external, bucket table

  1. CTE (CTAS with Common Table Expression)
CREATE TABLE cte_employee AS
WITH 
r1 AS  (SELECT name FROM r2 WHERE name = '..'),
r2 AS  (SELECT name FROM employee WHERE id= '..'),
r3 AS  (SELECT name FROM employee  WHERE  id= '..')
SELECT * FROM r1 UNION ALL SELECT * FROM r3;
  1. like --可以理解为复制表
CREATE TABLE 表名 LIKE 表名;

六、修改表

  1. 修改表名:(多用于数据备份)
    alter table 表名 rename to 新表名
  2. 修改表注释:
    alter table 表名 set tblproperties(‘comment’=‘new comment’)
  3. 修改文件分隔符:
    alter table 表名 set tblproperties(‘filed.delim’=’分割方式’)
  4. 修改表文件格式:
    alter table 表名 set fileformat rcfile(修改为rcfile格式)
  5. 修改表列相关操作
    1) 修改列名:
    alter table 表名 change 旧名 新名 字段类型;
    2)添加一列:
    alter table 表名 add columns(添加的列名 字段类型)
    3)替换一列:
    alter table 表名 replace columns(列名 字段类型)
    ps:会替换所有列,要谨慎使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值