Hive知识点梳理
2026/7/2 3:10:16 网站建设 项目流程

概述

Hive是基于Hadoop的数据仓库基础构架,它利用简单的SQL语句(简称HQL)来查询、分析存储在HDFS中的数据,并把SQL语句转换成MapReduce程序来进行数据的处理。( [6])

hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析

配置 DBeaver连接Hive

在 /opt 下创建 logs 目录

编写脚本启动hive相关服务

echo "============启动metastore服务中.... ===========" nohup /opt/soft/hive/bin/hive --service metastore > /opt/logs/hive.log 2>&1 & echo "============启动hiveserver2服务中....=============" nohup /opt/soft/hive/bin/hive --service hiveserver2 > /opt/logs/hive.log 2>&1 & if [ $? -eq 0 ] then echo "服务启动中.... 请等待大约2分钟 再使用 dbeaver 客户端连接 hive" else echo "启动失败,请前往日志 /opt/logs/hive.log 查看" fi

启动hive

1. 启动 hdfs 集群和 yarn 集群 2. 启动hive的服务

关闭hive服务

kill -9 进程id

测试Demo

本地创建几个文件(放一列数据)

在hive 建表(去MySQL数据库查看对应的元数据)

上传数据 测试查询

Hive 系统架构

数据类型

数据类型

Hive 建表要求

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later) [(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])] [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] [SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)] ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) [STORED AS DIRECTORIES] [ [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later) ] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later) [AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables) CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE existing_table_or_view_name [LOCATION hdfs_path]; data_type : primitive_type | array_type | map_type | struct_type | union_type -- (Note: Available in Hive 0.7.0 and later) primitive_type : TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later) | STRING | BINARY -- (Note: Available in Hive 0.8.0 and later) | TIMESTAMP -- (Note: Available in Hive 0.8.0 and later) | DECIMAL -- (Note: Available in Hive 0.11.0 and later) | DECIMAL(precision, scale) -- (Note: Available in Hive 0.13.0 and later) | DATE -- (Note: Available in Hive 0.12.0 and later) | VARCHAR -- (Note: Available in Hive 0.12.0 and later) | CHAR -- (Note: Available in Hive 0.13.0 and later) array_type : ARRAY < data_type > map_type : MAP < primitive_type, data_type > struct_type : STRUCT < col_name : data_type [COMMENT col_comment], ...> union_type : UNIONTYPE < data_type, data_type, ... > -- (Note: Available in Hive 0.7.0 and later) row_format : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] [NULL DEFINED AS char] -- (Note: Available in Hive 0.13 and later) | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)] file_format: : SEQUENCEFILE | TEXTFILE -- (Default, depending on hive.default.fileformat configuration) | RCFILE -- (Note: Available in Hive 0.6.0 and later) | ORC -- (Note: Available in Hive 0.11.0 and later) | PARQUET -- (Note: Available in Hive 0.13.0 and later) | AVRO -- (Note: Available in Hive 0.14.0 and later) | JSONFILE -- (Note: Available in Hive 4.0.0 and later) | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

建表练习

create table if not exists class94.stu (name string comment '姓名', course string comment '科目', score int comment '成绩') comment '学生考试成绩表' ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

常用操作

-- 创建 数据库 create database class94 -- 切换数据库 use class94 -- 查看详细建表语句 show create table class94.stu -- 复制表结构 create table b like class94.stu -- 查看表的元数据 desc formatted b -- 查看数据库下有哪些表 show tables

建表常用数据类型

create table hero( id string, name string, friends array<string>, child map<string,int>, addr struct<sf:string,city:string> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '_' -- 集合元素之间的分隔符 MAP KEYS TERMINATED BY ':';

复杂类型取值

-- 从数组中通过下标获取元素 select friends[0] from hero where name='xxx' --查找xxx的朋友 -- 从map 类型取值 select child['xxx'] from hero where name='xxx' 查找xxx的孩子xxx信息 -- 从struct 取数 select addr.sf from hero

Hive 表类型

内部表

外部表

分区表

分桶表

内部表 MANAGED_TABLE

内部表完全(元数据[MySQL]+数据文件[HDFS])由hive自己管理

删除内部表, 会同时删除 元数据 + 数据文件

外部表 EXTERNAL_TABLE

外部表的元数据由hive 管理, 数据文件被HDFS 管理

删除内部表, 只删除 元数据 , 数据文件保留

相当于内部表比较安全

内部表和外部表的区别

对比维度内部表(管理表)外部表(EXTERNAL)
创建关键字默认就是内部表,可手动写MANAGED显式声明必须写CREATE EXTERNAL TABLE
默认存储位置Hive 默认仓库/user/hive/warehouse/库名.db/表名自定义LOCATION指定任意 HDFS 路径
DROP TABLE 表名删除行为删除表元数据 + HDFS 真实数据文件一起彻底删除只删除 Hive 元数据(DBeaver 看不到表),HDFS 原始数据完整保留
数据归属Hive 全权管理数据原始数据独立存在,Hive 只是映射读取
适用场景临时测试数据、中间计算结果、用完可一键清空原始业务明细、源头日志、重要不可删除数据(生产推荐)

内外部表相互转换

内转外

ALTER TABLE 表名 SET TBLPROPERTIES('EXTERNAL'='TRUE');

外转内

ALTER TABLE 表名 SET TBLPROPERTIES('EXTERNAL'='FALSE');

验证是否转换成功

DESCRIBE EXTENDED 表名;

分区表

Hive 分区表是一种优化 Hive 查询方法,用以提高查询性能。分区表通过将数据分散到不同的分区中,使得查询仅分区数据,而不是整个表,从而减少了数据扫描的范围。

create table trade ( city string, amt int ) partitioned by (sf string) -- 指定分区字段和类型 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' -- 添加分区方式1 alter table trade add partition(sf='shandong') alter table trade add partition(sf='henan') select * from trade where sf='shandong' -- 添加分区方式2(常用方式) --将外部的分区文件夹和数据上传(put)到 表中, 该分区数据 没有 元数据 msck repair table trade -- 给分区添加 元数据

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询