Hive表操作

本文介绍了Hive中的表操作,包括创建托管表和外部表的区别,删除表时内部表与外部表的不同处理,以及如何修改已存在的表,如增加分区、修改表属性、序列化和反序列化属性、存储格式。Hive表的元数据存储在关系型数据库中,表数据可存储在HDFS或其他文件系统。

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

一:背景

和传统的数据库表的概念类似,hive表由表数据和描述表结构等的元数据组成。表数据一般存储在HDFS中,当然也可以存储在其他文件系统中,比如S3中;表的元数据存储在一个关系型数据库中,比如MYSQL中,而不是存储在HDFS中。

Hive中表分为两大类托管表(Managed table)也称之为受控表或内部表另外一种表是外部表(External table)。默认情况下,创建hive表时,hive会把数据存储到它的数据仓库目录下,这种方式创建的表我们称之为受控表。另外一种方式是创建一个外部表(External table)。此时,我们只需要告诉hive数据的外部引用地址,hive本身不会在自己的数据仓库目录下存储这些数据。


二:Hive表处理

1.创建表的语法:

Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED ,BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
create table表示创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以使用if not exists选项来忽略这个异常。

external关键字表示用户可以创建一个外部表,在建表的同时通过location来指定实际数据的路径,hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除真实数据。

如果文件数据是纯文本,可以使用stored as textfile。如果数据需要压缩,使用stored as sequencefile。

有分区的表可以在创建的时候使用Partitioner by语句。一个表可以拥有一个或者多个分区,每个分区会单独存在一

Hive的DML(Data Manipulation Language)操作包括对数据的增加(INSERT)、查询(SELECT)、更新(UPDATE)和删除(DELETE)。以下是每种操作的基本介绍: 1. INSERT操作Hive提供了向中插入数据的方法,可以将数据插入到新中或者追加数据到现有中。 ```sql INSERT OVERWRITE TABLE [PARTITION (分区列 = '分区值')] SELECT 列1, 列2 FROM 原 WHERE ...; INSERT INTO TABLE 现有 [PARTITION (分区列 = '分区值')] SELECT 列1, 列2 FROM 原 WHERE ...; ``` Hive 0.14版本之后支持更新(UPDATE)和删除(DELETE)操作。 2. SELECT操作: SELECT语句用于从中选择数据。这是最常用的查询语句,可以使用各种聚合函数、条件判断等来进行复杂查询。 ```sql SELECT 列名 FROM 名 WHERE 条件; ``` 3. UPDATE操作: UPDATE用于更新中已经存在的数据,但只能更新最后一个分区的数据。 ```sql UPDATE 名 SET 列名 = 新值 WHERE 条件; ``` 4. DELETE操作: DELETE用于从中删除数据,同样只支持删除最后一个分区的数据。 ```sql DELETE FROM 名 WHERE 条件; ``` Hive中的DML操作通常使用MapReduce进行执行,因此操作的性能相较于传统关系型数据库要慢一些。需要注意的是,由于Hive本质上是存储在HDFS上的数据,因此在执行更新或删除操作时,实际上是在原有数据的基础上进行标记或添加新的数据版本,而不是直接修改原数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值