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';
热门推荐
如何从“macOS 恢复”启动
美国进口关税是多少?如何缴纳?
微博个人认证门槛再调整,黄V阅读量要求降至10万
微博个人认证门槛再调整,黄V阅读量指标降至10万
湖北黄冈公言纠纷调解中心:电话调解如何化解社会矛盾?
年糕制作与照片备份指南
外三元猪和内三元猪的区别
海上巨龙:中国004航母疑似亮相,电磁弹射与核动力成焦点
功能性食管反流的五种治疗方法
如何撰写一篇高质量的论文大纲?
培养孩子独立性:有效策略减少孩子依赖性
如何确保宝马油箱盖的安全锁定?怎样判断油箱盖是否锁好?
打印机一直显示更换墨盒怎么办?原因分析与解决方案详解
喘息型慢性支气管炎和支气管哮喘
北京知名呼吸科专家张瑞利主任:慢性支气管炎和支气管哮喘的区别
如何判断自己已经被蛀牙了
蛀牙的症状
浅析汪曾祺小说文体语言的创造与演变
一份数据,看懂百万级豪车在中国的没落
五行均衡:喜用神为金的生活与命理指南
玉米胚芽粉可以长期吃吗,玉米胚芽粉喝了会年轻吗
深入探讨LLC谐振变换器中电压和电流的滞后关系及其对ZVS的影响
裂纹舌怎么治疗可以愈合
“旅居+养老”,宜昌悄然开启养老“旅居时代”
走遍山水,人这一辈子一定要去一趟宜昌,感受水电之都的文化魅力!
公积金债务重组怎么做
一文读懂正念:解锁心灵的平静密码
污水处理中的悬浮物去除技术研究
眉间纹与皱眉纹的区别及治疗方法
纯干货!RS485接口电路设计攻略