news 2026/8/24 21:31:10

Hive基础使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hive基础使用

标识符规则

大小写规则:
1. hive的数据库名、表名都不区分大小写
2. 建议关键字大写
命名规则:
1. 名字不能使用数字开头
2. 不能使用关键字
3. 尽量不使用特殊符号

操作数据库

--创建数据库
hive> create database db01;
--先判断数据库是否存在再创建
hive> create database if not exists db02;
--判断数据库并在创建数据库时添加注释
hive> create database if not exists db03 comment 'this is a database of laoyan';

hive默认元数据是放在mysql数据库中的,但是mysql数据库在刚开始的时候是不支持中文的,hive的元数据的数据库名字叫hive,创建该数据库的时候使用的字符集是latin 字符,不支持中文。
不信的话,创建一个带有中文解释的数据库:
create database if not exists db02 comment "大数据"

创建hive数据库之后,在你的hdfs上会多一个文件夹:

而且在mysql的元数据库,可以查看数据

查看所有数据库:

show databases;

切换数据库:

use db01; use default;

查看数据库结构:

语法1:desc database databaseName; 语法2:desc database extended databaseName; 语法3:describe database extended databaseName; 这三个语句的展示效果一样

删除数据库:

语法1:drop database databasename; # 这个只能删除空库 语法2:drop database databasename cascade; # 如果不是空库,则可以加cascade强制删除

操作表

关于数据类型

Hive的数据类型分为基本数据类型和复杂数据类型,下面是基本数据类型:

只需要简单的记忆几个即可:
INT ,STRING
因为varchar可以存储的字段长度有限,String可以存储高达2G的字符串长度,而且是可变长度的。
create table stu(name varchar(20));
create table stu(name string);

创建表

语法1:使用库.表的形式
create table db03.t_user(id int,name string);

语法2:指定分隔规则形式
create table db03.t_user2(
id int,
name string,
age int,
height double
)
comment "这是一个学生表"
row format delimited
fields terminated by '\t'
lines terminated by '\n'
stored as textfile;

LINES TERMINATED BY '\n'可以不写,默认就是换行符\n,写上只是显式声明,不写行为一致;

STORED AS TEXTFILE;建议加上,虽然 Hive 默认存储格式也是 TEXTFILE,但规范建表语句建议显式指定,可读性更好,后续切换格式也一目了然。

查看你当前在哪个数据库下面:

hive> select current_database();
OK
db02

切换数据库:use db03;

查看所有表:
show tables;

-- 实战:创建一个emp表

create table if not exists db03.emp( eno int, ename string, job string, mgr int ) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile;

创建完一个表之后,在你的hdfs上多了一个文件夹:

查看mysql中的元数据:

查看表结构:

desc tableName desc extended tableName; describe extended tableName;

删除表

drop table 表的名字;

Hive中 本地模式的开启

以下这个配置是使用本地资源跑MR任务: set hive.exec.mode.local.auto=true; set hive.exec.mode.local.auto.inputbytes.max=134217728; set hive.exec.mode.local.auto.input.files.max=4;

需要在console中,输入以下命令设置本地模式,只对本窗口有效果

假如遇到运行失败的语句,记得查看日志:/opt/installs/hive/logs/hive.log 文件。

比如我们刚才执行insert into,就报错了

遇到这个错,要么设置启用本地模式:

set hive.exec.mode.local.auto=true; set hive.exec.mode.local.auto.inputbytes.max=134217728; set hive.exec.mode.local.auto.input.files.max=4;

要么在hadoop的yarn-site.xml中,添加如下配置:

<property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> <description>default value is 1024</description> </property>

重启 yarn 即可:

stop-yarn.sh

start-yarn.sh


加载数据

加载本地数据

创建一个文件夹,将来把所有的数据,都放在这个文件下:

mkdir /home/hivedata

创建一个文件

vim user.txt

添加如下数据:

1,宝总

2,李李

3,小汪

4,爷叔

先有数据,根据数据的格式,和字段数量以及类型,创建一个表:

create table db03.t_user( id int, name string ) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile;

加载本地数据:

load data local inpath "/home/hivedata/user.txt" into table db03.t_user;

同时在HDFS上也能看到对应的数据文件,你能够看到里面的数据,并且没有乱码,原因是stored as textfile。

从HDFS加载到Hive中

hdfs dfs -put /home/hivedata/user.txt /home

将hdfs的数据导入到t_user 表中:就比之前少了一个 local 关键字

load data inpath '/home/user.txt' into table db03.t_user;

然后可以看到表中的数据了

查看hdfs上的user.txt 发现不见了,去哪里了,被移动走了!

思考一下:为什么是移动,而不是复制?

因为hdfs上的数据,默认都以为比较大,所以如果相同的数据占2份,非常的消耗空间。

查看数据,发现有两份,想覆盖怎么办?

load data local inpath '/home/hivedata/user.txt' overwrite into table db03.t_user;

覆盖之后数据如下:

文件也覆盖了

将数据直接放入表对应的文件夹下

再思考一个问题:既然hive中的数据是在hdfs上的,我们也可以手动的上传数据,能上传至/home,为何不能上传至:/user/hive/warehouse/db03.db/t_user

cp user.txt user2.txt hdfs dfs -put /home/hivedata/user2.txt /user/hive/warehouse/db03.db/t_user

可以看到hive中的数据,不要load 也可以被正常使用。

从其他表中加载数据

insert into table tableName2 select [.....] from tableName1; 扩展内容:向多张表中插入数据的语法 from tableName1 insert into tableName2 select * where 条件 insert into tableName3 select * where 条件
快速创建一个同样的表,只要表结构: create table db03.t_user2 like db03.t_user; 创建完之后再运行 insert into table db03.t_user2 select * from db03.t_user; 创建t_user3和 4 create table db03.t_user5 like db03.t_user; create table db03.t_user4 like db03.t_user; from db03.t_user2 insert into db03.t_user4 select * insert into db03.t_user5 select id,name;

克隆表数据

复制表结构 create table if not exists db03.t_user6 like db03.t_user2; 复制表结构和数据 create table if not exists db03.t_user7 as select * from db03.t_user2;

通过hive进行流量统计

这是数据文件,数据用空格符隔开

根据数据结构,创建表结构:

CREATE TABLE db03.flow( id string , phonenumber string, mac string, ip string, url string, uppacket int, downpacket int, upflow int, downflow int, status int, issuccess int )ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

FIELDS TERMINATED BY ' '; 代表存储的数据之间的分隔符

加载本地数据

load data local inpath '/home/hivedata/HTTP_flow.dat' into table db03.flow;

可以看到数据成功插入

需求:统计每一个手机号码的上行和下行流量以及总流量。

想在 hivesql 中给字典起别名,使用 反引号 将 字段名引起来。 ``

select phonenumber, sum(upflow) as `上行流量` , sum(downflow) as `下行流量`, sum(upflow+downflow) as `总流量` from db03.flow group by phonenumber;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 21:27:48

Hugging Face LFM2.5 DSpark草稿模型实战:3倍加速大语言模型推理

最近在 AI 模型推理领域&#xff0c;一个看似“复古”的策略正在重新成为焦点&#xff1a;草稿模型。如果你还在为部署大语言模型&#xff08;LLM&#xff09;时的高延迟和高成本而头疼&#xff0c;那么 Hugging Face 最新发布的 LFM2.5 系列 DSpark 草稿模型&#xff0c;可能提…

作者头像 李华
网站建设 2026/8/24 21:27:23

Hermes Agent run_agent的源码解读

关键词&#xff1a;Hermes Agent、AIAgent、源码分析、tool calling、对话循环、Python 文章目录一、背景&#xff1a;run_agent的介绍二、入口执行链&#xff1a;从命令到对话循环三、分层架构&#xff1a;五层职责拆解第 1 层:门面层(run_agent.py)第 2 层:初始化层(agent/ag…

作者头像 李华
网站建设 2026/8/24 21:27:14

【multisim仿真】D类放大器电路设计(仿真图)

前言TDA2030 是一款常用的集成功放芯片&#xff0c;很多同学容易混淆&#xff1a;TDA2030 属于 AB 类功放&#xff0c;并不是 D 类放大器&#xff0c;图中标注 D 类放大器属于常见误区。本文基于 Multisim 搭建 TDA2030 单电源双电源均可工作的 OCL 功率放大电路&#xff0c;完…

作者头像 李华
网站建设 2026/8/24 21:26:51

图吧工具箱 TubaWinUi3:82款硬件检测工具装进一个WinUI 3应用

图吧工具箱 TubaWinUi3&#xff1a;82款硬件检测工具装进一个WinUI 3应用 【免费下载链接】tubatools 图吧工具箱 winUI3 版 项目地址: https://gitcode.com/gh_mirrors/tu/tubatools 电脑变慢、新硬件到手要验货、装机后不知道瓶颈在哪——这些时刻的共同解药&#xff…

作者头像 李华
网站建设 2026/8/24 21:24:23

IEC 61499与边缘计算:下一代分布式工业控制架构实践

一、IEC 61499标准概述 IEC 61499是国际电工委员会发布的分布式工业过程测量与控制系统标准&#xff0c;定义了一种基于功能块&#xff08;Function Block&#xff09;的事件驱动控制架构。与传统IEC 61131-3&#xff08;PLC编程语言标准&#xff09;相比&#xff0c;IEC 61499…

作者头像 李华
网站建设 2026/8/24 21:23:30

【multisim仿真】JK触发器显示0123循环电路

前言最近用 74LS112 下降沿 JK 触发器搭建同步二进制计数器&#xff0c;原本目标是 3 位八进制计数器&#xff0c;但 Multisim 仿真实际现象为0、1、2、3 循环&#xff0c;只能计到 3&#xff0c;无法输出 4~7。本文结合电路图分析故障现象、原理推导、错误定位与修正方案&…

作者头像 李华