Hive 是基于 Hadoop 的数据仓库 ,不支持传统数据库的行级事务(标准 Hive) ,核心用于离线数据分析。
Hive 对数据库(Database) 的操作只有 CREATE(增)、DROP(删)、ALTER(改) ,没有 UPDATE 数据库的概念;对表数据:Hive 2.0+ 支持事务表的 INSERT/UPDATE/DELETE,非事务表仅支持追加写入。
一、数据库操作(增 / 删 / 改)
1. 创建数据库(CREATE)
sql
-- 基础创建
CREATE DATABASE IF NOT EXISTS my_db;
-- 带注释、存储路径创建
CREATE DATABASE IF NOT EXISTS my_db
COMMENT '这是我的测试数据库'
LOCATION '/user/hive/warehouse/my_db.db' -- 指定HDFS存储路径
WITH DBPROPERTIES ('creator'='admin', 'date'='2025-01-01'); -- 自定义属性
2. 删除数据库(DROP)
sql
-- 空数据库删除
DROP DATABASE IF EXISTS my_db;
-- 强制删除(数据库内有表时使用)
DROP DATABASE IF EXISTS my_db CASCADE;
3. 修改数据库(ALTER)
只能修改元数据信息,不能修改数据库名和存储路径:
sql
-- 修改数据库注释
ALTER DATABASE my_db SET DBPROPERTIES ('comment'='修改后的注释');
-- 修改数据库属性
ALTER DATABASE my_db SET DBPROPERTIES ('owner'='user01');
4. 查看数据库
sql
-- 查看所有数据库
SHOW DATABASES;
-- 查看数据库详情
DESC DATABASE my_db;
DESC DATABASE EXTENDED my_db; -- 查看详细信息
二、表数据操作(增 / 删 / 改)
前提说明
- 普通表 :仅支持
INSERT追加数据,不支持 UPDATE/DELETE - 事务表 :Hive 2.0+ 开启事务后,支持
UPDATE/DELETE
1. 插入数据(增 INSERT)
sql
-- 1. 直接插入单条/多条数据
INSERT INTO TABLE my_table VALUES (1,'张三'), (2,'李四');
-- 2. 查询结果插入(最常用)
INSERT INTO TABLE my_table SELECT id,name FROM user_table;
-- 3. 覆盖插入(清空表后写入)
INSERT OVERWRITE TABLE my_table SELECT * FROM user_table;
2. 更新数据(改 UPDATE)
必须是事务表
sql
-- 更新满足条件的数据
UPDATE my_table
SET name='张三三', age=25
WHERE id=1;
3. 删除数据(删 DELETE)
必须是事务表
sql
-- 删除指定条件数据
DELETE FROM my_table WHERE id=1;
-- 清空全表(等价于truncate)
DELETE FROM my_table;
三、Hive 事务表开启(必须配置)
如果需要使用 UPDATE/DELETE,必须在 Hive 客户端执行以下配置:
sql
SET hive.support.concurrency = true;
SET hive.enforce.bucketing = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
SET hive.compactor.initiator.on = true;
SET hive.compactor.worker.threads = 1;
创建事务表必须指定:分桶 + ORC 存储 + 事务属性
sql
CREATE TABLE my_table (
id INT,
name STRING
)
CLUSTERED BY (id) INTO 1 BUCKETS -- 分桶
STORED AS ORC -- ORC格式
TBLPROPERTIES ('transactional'='true'); -- 开启事务
总结
- 数据库操作 :
CREATE(创建)、DROP(删除)、ALTER(修改属性) - 数据插入 :
INSERT INTO/OVERWRITE(所有表都支持) - 数据更新 / 删除 :仅事务表 支持
UPDATE/DELETE,普通表不支持 - 核心特点 :Hive 主打离线分析,不适合高频增删改业务场景