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。
相关推荐
运维 小白2 小时前
3. 部署redis服务并监控redis
数据库·redis·缓存
2401_842623652 小时前
使用Seaborn绘制统计图形:更美更简单
jvm·数据库·python
wanhengidc2 小时前
云手机会导致本地数据被读取吗
运维·服务器·数据库·游戏·智能手机
是Yu欸2 小时前
LangGraph 智能体状态管理与决策
java·javascript·数据库
一只努力的微服务2 小时前
【Calcite 系列】深入理解 Calcite 的 SetOpToFilterRule
大数据·数据库·calcite·优化规则
2401_832035342 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
Fang fan3 小时前
Redis基础数据结构
数据结构·数据库·redis·缓存·bootstrap·sentinel
星空露珠3 小时前
迷你世界UGC3.0脚本Wiki对象模块管理接口 GameObject
开发语言·数据库·算法·游戏·lua
或与且与或非3 小时前
Redis-Lua脚本调试教程
数据库·redis·lua