Hive数据库

Hive 数据库 零基础入门详解

Hive 是基于 Hadoop 的数据仓库工具,它将结构化的数据文件映射成数据库和表 ,并提供类 SQL(HiveQL/HQL)的查询接口,让不懂 MapReduce 的用户也能通过 SQL 分析 HDFS 上的海量数据。简单来说:Hive = SQL 解析引擎 + Hadoop 存储 / 计算


一、核心概念(新手必懂)

1. 基本架构

表格

组件 作用
用户接口 CLI(命令行)、Beeline、Hue、JDBC/ODBC(程序调用)
解析器 / 编译器 将 HQL 解析成抽象语法树,编译优化后生成 MapReduce/Spark 任务
元数据存储 默认 Derby(单用户),生产用 MySQL(多用户共享),存储库 / 表 / 字段等信息
执行引擎 提交任务到 Hadoop(MapReduce)/Spark/Tez 执行
存储层 数据默认存在 HDFS,也支持 S3 / 本地文件系统

2. 核心对象

  • 数据库(Database):类似 MySQL 的库,用于隔离表(默认库:default)。
  • 表(Table) :映射 HDFS 上的目录 / 文件,分为:
    • 管理表(内部表):Hive 管理数据,删表会删除 HDFS 数据;
    • 外部表(External Table):仅管理元数据,删表不删 HDFS 数据(生产常用);
    • 分区表 / 分桶表:优化查询性能(按字段分区 / 哈希分桶)。
  • 视图(View):虚拟表,基于查询结果创建,不存储数据。

二、常用操作(实战代码)

前置条件

  1. 已安装 Hadoop 集群并启动(HDFS+YARN);
  2. 已安装 Hive 并配置元数据(MySQL);
  3. 启动 Hive:hive(CLI)或 beeline -u jdbc:hive2://localhost:10000(推荐)。

1. 数据库操作

sql

复制代码
-- 1. 创建数据库(指定存储路径,避免默认路径)
CREATE DATABASE IF NOT EXISTS mydb 
LOCATION '/user/hive/warehouse/mydb.db';

-- 2. 查看所有数据库
SHOW DATABASES;

-- 3. 切换数据库
USE mydb;

-- 4. 查看数据库信息
DESCRIBE DATABASE mydb;

-- 5. 删除空数据库(非空需加CASCADE)
DROP DATABASE IF EXISTS mydb CASCADE;

2. 表操作(核心)

(1)创建外部表(生产常用)

sql

复制代码
-- 创建分区表(按日期dt分区)
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.user_info (
    id INT COMMENT '用户ID',
    name STRING COMMENT '用户名',
    age INT COMMENT '年龄',
    gender STRING COMMENT '性别'
)
COMMENT '用户信息表'
PARTITIONED BY (dt STRING COMMENT '数据日期')  -- 分区字段
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t'  -- 字段分隔符(常用\t、,)
STORED AS TEXTFILE  -- 存储格式(TEXTFILE/ORC/Parquet)
LOCATION '/user/hive/warehouse/mydb.db/user_info';  -- 表在HDFS的路径
(2)数据操作

sql

复制代码
-- 1. 加载本地数据到分区表(dt=20240101)
LOAD DATA LOCAL INPATH '/root/data/user_20240101.txt'
OVERWRITE INTO TABLE mydb.user_info
PARTITION (dt='20240101');

-- 2. 查询数据(类MySQL)
SELECT id, name, age 
FROM mydb.user_info 
WHERE dt='20240101' AND age > 20;

-- 3. 插入数据(分区dt=20240102)
INSERT INTO TABLE mydb.user_info PARTITION (dt='20240102')
SELECT id, name, age, gender FROM mydb.tmp_user WHERE dt='20240102';

-- 4. 删除分区
ALTER TABLE mydb.user_info DROP PARTITION (dt='20240101');
(3)表管理

sql

复制代码
-- 查看表结构
DESCRIBE EXTENDED mydb.user_info;

-- 修改表名
ALTER TABLE mydb.user_info RENAME TO mydb.user_info_new;

-- 删除表(外部表仅删元数据,HDFS数据保留)
DROP TABLE IF EXISTS mydb.user_info;

三、关键特性(新手避坑)

  1. 不是实时数据库:Hive 适合离线批处理(分钟 / 小时级),不支持高并发、低延迟的 OLTP 场景(如 MySQL);
  2. 存储与计算分离:数据存在 HDFS,计算依赖 Hadoop/Spark,Hive 仅做 SQL 解析;
  3. 数据格式
    • 基础:TEXTFILE(易读但压缩率低);
    • 优化:ORC/Parquet(列式存储,压缩率高、查询快,生产首选);
  4. 分区 / 分桶优化
    • 分区:按时间 / 地域等维度拆分数据(如按天分区),查询时只扫描指定分区,减少数据量;
    • 分桶:按字段哈希分桶(如 id%100),适合抽样、JOIN 优化。

总结

  1. 核心定位:Hive 是 Hadoop 生态的 SQL 解析工具,用于离线分析海量结构化数据,非实时数据库;
  2. 核心操作:库表创建(优先外部表)、分区管理、数据加载 / 查询,语法接近 MySQL 但需关注 HDFS 路径和存储格式;
  3. 性能优化:生产中优先用 ORC/Parquet 格式 + 分区 / 分桶,元数据存储用 MySQL 替代 Derby。
相关推荐
故乡dee云27 分钟前
AWS 产品太多不会选?按“网站、数据库、文件、日志”4 类需求快速匹配
数据库·云计算·aws
曹牧2 小时前
C#:问号
前端·数据库·c#
奇树谦2 小时前
《现代 Key-Value 数据库原理:从 B+Tree 到 LSM Tree》-第五篇:现代数据库横向对比
数据库·lsm-tree
李白客2 小时前
分布式集群与数据库产业:从单机到集群的架构跃迁与市场重构
数据库·分布式·架构
福大大架构师每日一题3 小时前
Redis 8.10.0 正式发布:紧凑哈希、批量导入、备份恢复、流与时序能力全面升级
数据库·redis·哈希算法
雨晨源码(同名B站)4 小时前
基于深度学习YoloV11农业病害虫害检测系统 智慧农业信息化综合管理平台 (附源码+lw文档+ppt)
数据库·人工智能·深度学习·yolo·信息可视化
DBA小马哥4 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding
云和数据.ChenGuang4 小时前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
祈禾5 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存
东方护航数据恢复(深圳)5 小时前
MySQL_Oracle数据库崩溃修复全攻略_东方护航数据恢复深圳店
数据库·mysql·oracle