Hive的基本操作(附详细步骤和相关操作截图)
创作时间:
作者:
@小白创作中心
Hive的基本操作(附详细步骤和相关操作截图)
引用
1
来源
1.
https://www.cnblogs.com/bjynjj/p/18539672
Apache Hive是基于Hadoop的数据仓库工具,用于处理和分析大规模数据集。它提供了一个类似于SQL的查询语言(HiveQL),使得熟悉SQL的用户能够轻松地进行数据查询和分析。本文将详细介绍Hive的基本概念、架构、元数据管理以及基本操作,帮助读者快速掌握Hive的使用方法。
Hive3.1.2概述与基本操作
1.1 Hive简介
Hive本质上是一个将SQL转换为MapReduce任务的工具,底层依赖HDFS进行数据存储。可以将其理解为一个MapReduce客户端,通过类SQL语法简化了大数据处理的复杂性。
为什么使用Hive?
- 直接使用Hadoop需要较高的学习成本,而Hive通过类SQL语法降低了开发难度。
- 避免了编写复杂的MapReduce代码,减少了开发人员的学习成本。
- 支持功能扩展,如开窗函数等高级特性。
Hive的特点:
- 可扩展性:集群规模可以自由扩展,通常不需要重启服务。
- 延展性:支持自定义函数,满足特定需求。
- 容错性:即使节点出现错误,SQL任务仍可完成执行。
Hive的优缺点:
优点:
- 操作接口采用类SQL语法,提高开发效率。
- 避免编写MapReduce代码,降低学习成本。
- 适用于对实时性要求不高的场景。
- 支持用户自定义函数。
- 具有良好的容错性和可扩展性。
缺点:
- HQL表达能力有限,不适合迭代式算法和复杂数据挖掘。
- 执行效率相对较低,生成的MapReduce作业不够智能化,调优难度大。
Hive应用场景:
- 日志分析:广泛应用于互联网公司,如百度、淘宝等。
- 统计网站的PV(页面浏览量)、UV(独立访客)、SKU(库存单位)、SPU(标准产品单元)、SKC(库存商品)等指标。
- 多维度数据分析和数据仓库构建。
- 海量结构化数据的离线分析。
1.2 Hive架构
1.2.1 Client
Hive提供了多种客户端连接方式:
- CLI(Hive Shell):通过命令行界面直接与Hive交互。
- JDBC/ODBC:通过Java应用程序连接Hive,使用Thrift软件框架实现跨语言服务开发。
- WebUI:提供了一个简单的Web页面界面,但功能较为简陋。
1.2.2 Metastore
元数据包括表名、所属数据库、拥有者、列/分区字段等信息。Hive通常使用MySQL等数据库存储元数据,需要提供URI、用户名、密码和驱动信息。
1.2.3 Driver
Hive的查询处理流程:
- 解析器(SQL Parser):将SQL字符串转换为抽象语法树(AST)。
- 编译器(Physical Plan):生成逻辑执行计划。
- 优化器(Query Optimizer):对逻辑执行计划进行优化。
- 执行器(Execution):将逻辑计划转换为MapReduce任务。
1.2.4 数据处理
Hive的数据存储在HDFS中,计算由MapReduce完成。HDFS和MapReduce在源码级别上进行了整合,两者结合最佳。
1.4 Hive的三种交互方式
1)第一种交互方式
通过命令行启动Hive Shell:
nohup hive --service metastore >/dev/null &
hive
quit;
2)第二种交互方式
通过HiveServer2提供服务:
nohup hive --service metastore >/dev/null &
nohup hiveserver2 &
beeline -u jdbc:hive2://master:10000 -n root
!exit
3)第三种交互方式
使用-e参数直接执行HQL语句:
bin/hive -e "show databases;"
使用-f参数执行脚本文件:
vim hive.sql
create database bigdata29;
use bigdata29;
create table test1
(
id bigint,
name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
show tables;
hive -f hive.sql
1.5 Hive元数据
Hive元数据库中重要的表结构:
- VERSION:存储Hive版本信息。
- DBS、DATABASE_PARAMS:存储数据库基本信息和参数。
- TBLS、TABLE_PARAMS、TBL_PRIVS:存储表/视图的基本信息、属性和授权信息。
- SDS、SD_PARAMS、SERDES、SERDE_PARAMS:存储文件存储信息。
- COLUMNS_V2:存储表字段信息。
2、Hive的基本操作
2.1 Hive库操作
2.1.1 创建数据库
- 创建数据库:
create database testdb;
- 避免重复创建:
create database if not exists testdb;
2.2.2 创建数据库和位置
create database if not exists zs location '/bigdata32/databases'
2.2.3 修改数据库
数据库的名称和位置不可更改,但可以添加其他元数据信息:
alter database dept set dbproperties('createtime'='20220531');
2.2.4 数据库详细信息
- 显示数据库:
show databases;
show databases like 't*';
- 查看数据库详情:
desc database testdb;
- 切换数据库:
use testdb;
2.2.5 删除数据库
- 最简写法:
drop database testdb;
- 避免错误:
drop database if exists testdb;
- 强制删除非空数据库:
drop database if exists testdb cascade;
2.2 Hive数据类型
2.2.1 基础数据类型
类型 | Java数据类型 | 描述 |
|---|---|---|
TINYINT | byte | 8位有符号整型 |
SMALLINT | short | 16位有符号整型 |
INT | int | 32位有符号整型 |
BIGINT | long | 64位有符号整型 |
BINARY | 二进制数据类型 | |
FLOAT | float | 32位二进制浮点型 |
DOUBLE | double | 64位二进制浮点型 |
DECIMAL | 10进制精确数字类型 | |
VARCHAR | 变长字符类型 | |
CHAR | 固定长度字符类型 | |
STRING | string | 字符串类型 |
DATE | 日期类型 | |
DATETIME | 日期时间类型 | |
TIMESTAMP | 时区无关的时间戳类型 | |
BOOLEAN | boolean | 布尔类型 |
2.2.2 复杂的数据类型
类型 | 定义方法 | 构造方法 |
|---|---|---|
ARRAY | array | array(1, 2, 3) |
MAP | map<string, string> | map(“k1”, “v1”, “k2”, “v2”) |
STRUCT | struct<x:int, y:int> | named_struct(‘x’, 1, ‘y’, 2) |
2.3 Hive表操作
2.3.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 students5
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
2.3.2 显示表
show tables;
show tables like 'u*';
desc t_person;
desc formatted students;
2.3.3 加载数据
- 使用HDFS命令:
hdfs dfs -put '本地数据' 'hive表对应的HDFS目录下'
- 使用load data:
load data local inpath '/usr/local/soft/bigdata32/data/students' into table students2;
- 使用create table as:
create table st1 as select * from students1 where age > 17;
- 使用insert into:
insert into students4 select * from students2 where age > 15;
2.3.4 修改列
desc students2;
alter table students2 add columns (education string);
alter table stduents2 change education educationnew string;
2.3.5 删除表
drop table students2;
2.4 Hive内外部表
2.4.1 Hive内部表
- 创建表时会在HDFS上创建对应目录。
- 数据一旦被load,就不能被修改。
- 删除表时,表对应的文件夹和数据都会被删除。
create table students_internal
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/databases/zs/';
2.4.2 Hive外部表
- 删除表时,数据仍然保存在HDFS中,不会删除。
- 通常用于多个程序共享的数据。
create external table students_external
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/databases/zs';
2.5 Hive导出数据
将表中的数据备份
- 导出到本地:
mkdir -p /usr/local/soft/shujia
insert overwrite local directory '/usr/local/soft/shujia/person_data' select * from t_person;
- 按指定格式导出到本地:
insert overwrite local directory '/usr/local/soft/shujia/person'
ROW FORMAT DELIMITED fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
lines terminated by '\n'
select * from t_person;
- 导出到HDFS:
hdfs dfs -mkdir -p /shujia/bigdata17/copy
insert overwrite local directory '/usr/local/soft/shujia/students_data2' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from students
- 使用HDFS命令:
hdfs dfs -mkdir -p /shujia/bigdata17/person
hdfs dfs -cp /hive/warehouse/t_person/* /shujia/bigdata17/person
将表结构和数据同时备份
export table t_person to '/shujia/bigdata17/copy';
drop table t_person;
import from '/shujia/bigdata17';
热门推荐
国家开放大学大专报名条件是什么?毕业后文凭有什么作用?
2024贵州旅游攻略:绝美景点、特色美食与贴心优惠
喉咙咸怎么回事
印第安人确实来自中国?研究发现:其祖先与云南蒙自人有渊源关系
香港医生团队参访深圳市妇幼保健院妇科聚焦超声治疗中心
法理学视角下的刑法案例分析
边缘计算网关功能优势及带来的数据处理变化
商品房产权到期之后怎么办
心血管健康的三大指标:血压、心率与心电图
秋梨膏什么季节喝合适 秋梨膏和枇杷膏的区别有哪些
哪吒2导演签名卡牌被炒至9.5万元 天价卡牌引关注
早期胆管癌手术切除后应注意什么
50家企业提供1300余个岗位!珠海举行残疾人专场招聘会
川贝蒸梨的正确做法?好方法,真好做!
猎头招聘如何应对招聘市场的变化?
中国人工智能发展潜力突出 行业场景应用需高度定制化
ASP.NET Core 面试宝典【刷题系列】
江西被严重低估的仙山,此生必去的道教名山,龙虎山也太好玩了
江西去年性别比为1.069:1,已连续两年下降
如何来省钱订酒店?分享你的看法
女孩可以从诗词中取什么名字
胆结石诊断方法全解析:腹部超声、CT扫描与MRCP的优劣对比
谨和五味 食饮有节——《黄帝内经》论饮食养生
不同光源对植物生长照明效果研究
七座车有哪些?MPV、SUV、微面三大类别详解
国医大师朱南孙的七大养生秘诀
张圣君食物传说与古代福建农业信仰
月煞是什么意思
坦克车如何制造?这种制造过程有哪些技术难点?
飞猪机票大数据:低价机票何时放,10w+条机票数据寻真相