Hive -2025/8/19

news/2025/10/14 16:58:33/文章来源:https://www.cnblogs.com/XYu1230/p/19047443

分布式SQL计算

image

image

image

Hive 基础架构

image

切换java版本

ln -sfn /export/server/jdk1.8.0_361 /export/server/jdk   # 切换回 JDK8
ln -sfn /export/server/jdk-17.0.12 /export/server/jdk   # 切换到 JDK17
#启动HDFS
start-dfs.sh
#启动YARN集群
start-yarn.sh
#启动或停止历史服务器
mapred --daemon start historyserver#启动元数据管理服务(hive目录下)
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &#启动Hive客户端(hive目录下)
bin/hive#先启动metastore服务 然后启动hiveserver2服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &#启动Beeline
bin/beeline
#连接Hdfs(在Beeline里) (用户:hadoop 密码:空)
! connect jdbc:hive2://node1:10000http://node1:9870 // 查看HDFS系统的状态
http://node1:8088 //查看YARN集群的监控界面

这里使用Tez 报错 修改为MR,可以正常启动Hive

image

# 切到 JDK 17
cd /export/server && rm -f jdk && ln -s /export/server/jdk-17.0.12 jdk && java -version# 切到 JDK 1.8
cd /export/server && rm -f jdk && ln -s /export/server/jdk1.8.0_361 jdk && java -version

image

Hive客户端

HiveServer2

image

image

Hive操作

创建数据库

image

创建表


show databases;// 创建数据库
create database myhive;desc database myhive;use myhive;
create table test(id int,name string,gender string
);//删除数据库表
drop table test;

内部表与外部表

image

内外部表转换

image

数据加载和导出

加载 local是从Linux系统上传

image

image

导出

image

通过bin/hive

image

> 重定向符 可以将输出结果重定向到文件ls -l > 1.txt

总结

image

分区

image

-- 单分区
create table myhive.score(id string, cid string, score int) partitioned by (year string)
row format delimited fields terminated by '\t';load data local inpath '/home/hadoop/score.txt' into table score partition(year='2024');
load data local inpath '/home/hadoop/score.txt' into table score partition(year='2025');-- 多分区
create table myhive.score2(id string, cid string, score int) partitioned by (year string, month string)
row format delimited fields terminated by '\t';load data local inpath '/home/hadoop/score.txt' into table score2 partition(year='2024', month='1');

分桶

image

-- 开启分桶表自动处理功能
-- 说明:设置为 true 后,Hive 会根据表定义的分桶数自动进行分桶操作
-- 无需手动指定 reduce 任务数量或显式使用 CLUSTER BY
set hive.enforce.bucketing=true;-- 创建分桶表
-- 说明:
-- 1. 表结构包含课程 ID (c_id)、课程名称 (c_name)、教师 ID (t_id)
-- 2. clustered by (t_id):指定按教师 ID (t_id) 进行分桶
-- 3. into 3 buckets:将数据分为 3 个桶
-- 4. row format delimited fields terminated by '\t':指定字段间分隔符为制表符
create table myhive.course
(
c_id string,
c_name string,
t_id string
) clustered by (t_id) into 3 buckets row format delimited fields terminated by '\t';-- 删除 course 表
-- 说明:删除已存在的 course 表,若表不存在会报错,可添加 if exists 避免
drop table course;-- 创建临时数据表
-- 说明:
-- 1. 临时表结构与分桶表一致,用于中转数据
-- 2. 分桶表通常不直接使用 load data 加载,而是通过临时表过渡
create table myhive.temp_course
(
c_id string,
c_name string,
t_id string
) row format delimited fields terminated by '\t';-- 加载数据到临时表
-- 说明:
-- 1. local inpath:表示从本地文件系统加载数据(不加 local 则从 HDFS 加载)
-- 2. '/home/hadoop/course.txt':本地数据文件路径
-- 3. 数据格式需与表定义的分隔符一致(此处为制表符)
load data local inpath '/home/hadoop/course.txt' into table temp_course;-- 向分桶表中插入数据
-- 说明:
-- 1. insert overwrite:覆盖分桶表中已有数据
-- 2. 从临时表查询数据并插入分桶表
-- 3. cluster by (c_id):插入时指定分桶逻辑(建议与表定义的 clustered by 字段保持一致)
insert overwrite table myhive.course
select *
from myhive.temp_course cluster by (c_id);

总结

image

image

修改表

alter table score2 rename to score;# 修改表的属性
desc formatted score;
alter table score set tblproperties('EXTERNAL'='TRUE');
alter table score set TBLPROPERTIES('comment'='this is table comment');# 添加表分区
alter table score add partition(year='2019', month='10', day='01');
# 修改分区值(修改元数据记录, HDFS的实体文件夹不会改名但是在元数据记录中是改名了的)
alter table score partition(year='2019', month='10', day='01') rename to partition(year='2019', month='10', day='07');
# 删除分区(删除元数据, 数据本身还在)
alter table score drop partition(year='2019', month='10', day='07');# 添加新列
alter table score add columns (v1 int, v2 string);
# 修改列名
alter table score change v2 v2new string;# 删除表
drop table myhive.score;# 清空表数据(无法清空外部表)
truncate table course;
truncate table test_load2;

复杂类型

array类型

-- array类型
create table myhive.test_array(name string, work_locations array<string>)
row format delimited fields terminated by '\t'
collection items terminated by ',';-- 加载数据
load data local inpath '/home/hadoop/test_array.txt' into table test_array;-- 查询
select * from myhive.test_array;-- 序号从0开始
select name, work_locations[0] from test_array;-- 找谁在tianjin工作过
select * from myhive.test_array where array_contains(work_locations, 'tianjin');

image

map复杂类型

create table myhive.test_map(id int,name string,members map<string, string>,age int
) row format delimited fields terminated by ','
collection items terminated by "#"
map keys terminated by ':';load data local inpath '/home/hadoop/data_for_map_type.txt' into table myhive.test_map;-- 查看内容
select * from myhive.test_map;-- 查看成员中每个人的父亲是谁
select name, members['father'] , members['mother'] from myhive.test_map;-- 取出map的key , 类型是 array
select map_keys(members) from myhive.test_map;
-- 获取map的value,类型是array
select map_values(members) from myhive.test_map;-- array_contains 去查看指定的数据是否包含在map中, 看看谁有sister这个key
select * from myhive.test_map where ARRAY_CONTAINS(map_keys(members), 'sister') ;
-- array_contains 去查看指定的数据是否包含在map中, 看看谁有王林这个value
select * from myhive.test_map where ARRAY_CONTAINS(map_values(members), '王林') ;

image

Struct类型

create table myhive.test_struct(id int,info struct<name:string, age:int>
) row format delimited fields terminated by "#"
collection items terminated by ':';load data local inpath '/home/hadoop/data_for_struct_type.txt' into table myhive.test_struct;-- 查询内容
select * from myhive.test_struct;

image

总结

image

查询

普通查询

create database itheima;
use itheima;CREATE TABLE itheima.orders (orderId bigint COMMENT '订单id',orderNo string COMMENT '订单编号',shopId bigint COMMENT '门店id',userId bigint COMMENT '用户id',orderStatus tinyint COMMENT '订单状态 -3:用户拒收 -2:未付款的订单 -1:用户取消 0:待发货 1:配送中 2:用户确认收货',goodsMoney double COMMENT '商品金额',deliverMoney double COMMENT '运费',totalMoney double COMMENT '订单金额(包括运费)',realTotalMoney double COMMENT '实际订单金额(折扣后金额)',payType tinyint COMMENT '支付方式,0:未知;1:支付宝,2:微信;3、现金;4、其他',isPay tinyint COMMENT '是否支付 0:未支付 1:已支付',userName string COMMENT '收件人姓名',userAddress string COMMENT '收件人地址',userPhone string COMMENT '收件人电话',createTime timestamp COMMENT '下单时间',payTime timestamp COMMENT '支付时间',totalPayFee int COMMENT '总支付金额'
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA LOCAL INPATH '/home/hadoop/itheima_orders.txt' INTO TABLE itheima.orders;CREATE TABLE itheima.users (userId int,loginName string,loginSecret int,loginPwd string,userSex tinyint,userName string,trueName string,brithday date,userPhoto string,userQQ string,userPhone string,userScore int,userTotalScore int,userFrom tinyint,userMoney double,lockMoney double,createTime timestamp,payPwd string,rechargeMoney double
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA LOCAL INPATH '/home/hadoop/itheima_users.txt' INTO TABLE itheima.users;-- 查询全表数据
SELECT * FROM itheima.orders;-- 查询单列信息
SELECT orderid, userid, totalmoney FROM itheima.orders o ;-- 查询表有多少条数据
SELECT COUNT(*) FROM itheima.orders;-- 过滤广东省的订单
SELECT * FROM itheima.orders WHERE useraddress LIKE '%广东%';-- 找出广东省单笔营业额最大的订单
SELECT * FROM itheima.orders WHERE useraddress LIKE '%广东%'
ORDER BY totalmoney DESC LIMIT 1;-- 统计未支付、已支付各自的人数
SELECT ispay, COUNT(*) FROM itheima.orders o GROUP BY ispay ;-- 在已付款的订单中,统计每个用户最高的一笔消费金额
SELECT userid, MAX(totalmoney) FROM itheima.orders WHERE ispay = 1 GROUP BY userid;
-- 统计每个用户的平均订单消费额
SELECT userid, AVG(totalmoney) FROM itheima.orders GROUP BY userid;
-- 统计每个用户的平均订单消费额,并过滤大于10000的数据
SELECT userid, AVG(totalmoney) AS avg_money FROM itheima.orders GROUP BY userid HAVING avg_money > 10000;-- 订单表和用户表JOIN 找出用户username
SELECT o.orderid, o.userid, u.username FROM itheima.orders o JOIN itheima.users u ON o.userid = u.userid;
SELECT o.orderid, o.userid, u.username FROM itheima.orders o LEFT JOIN itheima.users u ON o.userid = u.userid;

rlike

-- 查找广东省数据
SELECT * FROM itheima.orders WHERE useraddress RLIKE '.*广东.*';
-- 查找用户地址是: xx省 xx市 xx区
SELECT * FROM itheima.orders WHERE useraddress RLIKE '..省 ..市 ..区';
-- 查找用户姓为: 张、王、邓
SELECT * FROM itheima.orders WHERE username RLIKE '[张王邓]\\S+';
-- 查找手机号符合: 188*****0*** 规则
SELECT * FROM itheima.orders WHERE userphone RLIKE '188\\S{4}0[0-9]{3}';### Union```sql
SELECT * FROM itheima.course WHERE t_id = '王力鸿';
-- 去重演示
SELECT * FROM itheima.course
UNION
SELECT * FROM itheima.course;
-- 不去重
SELECT * FROM itheima.course
UNION ALL
SELECT * FROM itheima.course;
-- UNION写在FROM中 UNION写在子查询中
SELECT t_id, COUNT(*) FROM
(
SELECT * FROM itheima.course WHERE t_id = '周杰轮'
UNION ALL
SELECT * FROM itheima.course WHERE t_id = '王力鸿'
) AS u GROUP BY t_id;
-- 用于INSERT SELECT
INSERT OVERWRITE TABLE itheima.course2
SELECT * FROM itheima.course
UNION
SELECT * FROM itheima.course;

数据抽样


-- 随机桶抽取,分配桶是有规则的
-- 可以按照列的hash取模分桶
-- 按照完全随机分桶
-- 其它条件不变的话,每一次运行结果一致
select username, orderId, totalmoney
FROM itheima.orderstablesample (bucket 3 out of 10 on username);-- 完全随机,每一次运行结果不同
select *
from itheima.orderstablesample (bucket 3 out of 10 on rand());-- 数据块抽取,按顺序抽取,每次条件不变,抽取结果不变
-- 抽取100条
select *
from itheima.orderstablesample (100 rows);-- 取1%数据
select *
from itheima.orderstablesample (1 percent);-- 取1KB数据
select *
from itheima.orderstablesample (1K);

虚拟列


set hive.exec.rowoffset = true
select username, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK
from itheima.orders

image

函数


-- 查看所有可用函数
show functions;
-- 查看函数使用方式
describe function extended count;
-- 数值函数
-- round 取整,设置小数精度
select round(3.1415926); -- 取整 (四舍五入)
select round(3.1415926, 4); -- 设置小数精度4位 (四舍五入)
-- 随机数
select rand(); -- 完全随机
select rand(3); -- 设置随机数种子,设置种子后每次运行结果一致的
-- 绝对值
select abs(-3);
-- 求PI
select pi();
-- 集合函数
-- 求元素个数
use myhive;
select size(work_locations) from test_array;
select size(members) from test_map;
select map_keys(members) from test_map;
select map_values(members) from test_map;
select * from test_array where ARRAY_CONTAINS(work_locations, 'tianjin');
select *, sort_array(work_locations) from test_array;-- 类型转换函数
-- 转二进制
select binary('hadoop');
-- 自由转换,类型转换失败报错或返回NULL
select cast('1' as bigint);
-- 日期函数
-- 当前时间戳
select current_timestamp();
-- 当前日期
select current_date();
-- 时间戳转日期
select to_date(current_timestamp());
-- 年月日季度等
select year('2020-01-11');
select month('2020-01-11');
select day('2020-01-11');
select quarter('2020-01-11');
select dayofmonth('2020-05-11');
select hour('2020-05-11 10:36:59');
select minute('2020-05-11 10:36:59');
select second('2020-05-11 10:36:59');
select weekofyear('2020-05-11 10:36:59');
-- 日期之间的天数
select datediff('2022-12-31', '2019-12-31');
-- 日期相加、相减
select date_add('2022-12-31', 5);
select date_sub('2022-12-31', 5);-- 条件函数
-- if判断
use itheima;
select if(truename is NULL, '不知道名字', truename) from users;
-- null判断
select isnull(truename) from users;
select isnotnull(truename) from users;
-- nvl: 如果value为 null,则返回default_value,否则value.
select nvl(truename, '不知道名字') FROM users;
-- 返回第一个不是 NULL 的 v,如果所有 v 都是 NULL,则返回 NULL。
select coalesce(truename, brithday) from users;
-- 当 a = b 时,返回 c; [当 a = d 时,返回 e]* ;否则返回 f。
select username, case username when '周杰伦' then '知名歌星' when '张鲁依' then '知名演员' else '不知道身份' end from users;
select truename, case when truename is null then '不知道名字' else truename end from users;
-- When a = true, returns b; when c = true, returns d; else returns e.
-- a可以是表达式, 如1=1
-- 如果 a=b, 则返回 NULL;否则返回 a。
-- 等价: CASE WHEN a = b then NULL else a
select truename , nullif(truename, '萧呀轩') from users;
--如果boolean_condition结果不为True,则引发异常报错
select assert_true(1=1);-- 字符串函数
-- 连接字符串
select concat(loginname, username) from users;
select concat_ws(',', loginname, username) from users;
-- 统计长度
select username, length(username) from users;
-- 转大小写
select lower('ABCDE'); -- 转小写
select upper('abcde'); -- 转大写
-- 去除首尾空格
select trim(' hadoop ');
-- 字符串分隔
select split('hadoop,bigdata,hdfs', ',');-- 数据脱敏函数
-- hash 加密 (结果是16进制字符串)
select mask_hash('hadoop');-- 其它函数
-- hash加密 (结果是数字)
select hash('hadoop');
select hash('bigdata');
-- 当前用户
select current_user();
-- 当前数据库
select CURRENT_DATABASE();
-- hive版本
select version();
-- 计算md5
select md5('hadoop');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年10月学术会议全名单!科研人请抢先收藏,别错过关键节点!

2025年10月,全球学术界迎来了一系列高水平的国际会议,涵盖了网络通信、人工智能、智能制造等多个前沿领域。以下是这些会议的详细介绍和时间安排,为相关领域的学者和研究人员提供参考。 第三届网络、通信与智能计算…

用 Python + Vue3 打造超炫酷音乐播放器:网易云歌单爬取 + Three.js 波形可视化

用Python + Vue3 打造超炫酷音乐播放器*项目背景:一直想做一个属于自己的音乐播放器,既能听歌,又有炫酷的视觉效果。于是,我结合 Python 爬虫能力 与 Vue3 前端生态,打造了一个集网易云音乐数据获取 + Web Audio …

读书笔记:时间戳(TIMESTAMP)类型:比日期更强大的时间管理工具

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

python对比“解包赋值”和 match 语句中的“解构”

🎯 核心区别一句话总结:普通解包赋值:只做“拆包 + 赋值”,不检查类型或结构是否匹配(错了就报错)。 match 中的解构:先检查结构/类型是否匹配,匹配成功才解包赋值,否则跳过。一、场景:处理一个表示点的元组…

2025 防静电/耐高温/耐低温/耐湿耐水/防油/耐酸耐碱/进口原料塑烧板厂家推荐榜单:聚焦高效过滤解决方案

在工业除尘与粉体回收领域,塑烧板凭借过滤精度高、使用寿命长、适应复杂工况等优势,成为众多企业的核心设备选择。结合技术实力、市场口碑与应用反馈,以下为大家梳理出五家值得关注的塑烧板厂家,供行业采购与选型参…

2025 优质的数控/空心管/螺旋/钢带/方向盘/伺服/液压/不锈钢带/桶箍/抱箍/卡箍/弹簧打圈机厂家推荐榜单:聚焦精度与服务的实力之选

在金属线材成型领域,打圈机的精度、稳定性与适配性直接影响制造企业的生产效率与产品质量。当前市场上设备厂家资质参差不齐,为帮助行业伙伴精准选择靠谱供应商,结合生产规模、技术实力、产品性能及服务能力等多维度…

在线PS(Photoshop网页版)如何加马赛克,保护隐私的小技巧

在这个信息化的时代,保护隐私显得尤为重要。尤其是在日常分享图片时,无论是朋友圈中晒出的聚会照片,还是协作工作中发送的档案截图,都需要对部分信息做模糊处理。今天,我想和大家分享一个快速给图片加马赛克的小技…

2025 深圳点胶机厂家实用推荐榜:从精密制造到行业适配的优选指南

在智能制造升级的浪潮中,点胶机作为精密流体控制的核心设备,其性能直接影响电子制造、新能源、半导体等领域的生产质量与效率。随着高精度、智能化需求的持续增长,选择适配的设备厂家成为制造企业降本增效的关键。以…

观点分享:Oracle数据库GRID升级的案例的闲聊

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。今天我们来聊…

2025 广东洗头机厂家推荐榜:从家用到商用的品质之选

在生活节奏加快与洗护需求升级的双重驱动下,智能洗头机正逐渐走进家庭、美发门店、养老机构等多个场景,成为提升洗护效率与体验的重要设备。本次结合产品品质、技术实力、场景适配性及市场口碑等维度,筛选出 5 家值…

深入解析:XC7A100T-2CSG324I 赛灵思 Xilinx AMD Artix-7 FPGA

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025北京优质拆迁/征地/征拆/动迁/腾退/强拆/房产/烂尾楼/行政诉讼/行政赔偿律师事务所所推荐:聚焦专业实力与服务价值

在法律需求日益多元化的今天,选择一家专业可靠的律师事务所成为解决纠纷、规避风险的关键。北京作为国内法律服务的核心高地,汇聚了众多实力强劲的律所。以下结合专业能力、服务口碑与实务表现,推荐五家各具特色的律…

excel单元格粘贴显示科学计数法,需要展示完整的字符串的解决方法

excel单元格粘贴显示科学计数法,需要展示完整的字符串的解决方法1.现象 excel 2007粘贴会显示科学计数法,无法完整显示字符 2.解决方法 可以使用企业微信的在线表格或者使用wps的在线表格

2025 佛山高尔夫模拟器厂家推荐:从家庭到专业场景的靠谱之选

随着室内高尔夫运动的兴起,模拟器设备成为连接大众与这项运动的重要桥梁。但市场上品牌繁杂,技术参数与场景适配性差异较大,给消费者选择带来困扰。结合技术测评、用户反馈及场景适配能力,以下推荐五家各有优势的高…

跨越三年周期、几十部门、上千零部件:庞大整车研发项目如何被清晰掌控?

在整车研发的复杂世界里,团队、部门、零部件和流程交织成一张庞大网络。本文带你探索如何通过现代化管理方法实现整车研发全程可视、可拆解、可控。在整车研发的复杂世界里,团队、部门、零部件和流程交织成一张庞大网…

【SPIE出版】2025计算机视觉和影像计算国际学术会议

2025计算机视觉和影像计算国际学术研究会议将于2025年11月21-11日23日在中国香港举办,本次“计算机视觉和影像计算国际研讨会”旨在汇聚来自学术界和工业界的研究人员和专家,共同探讨计算机视觉与影像计算领域的最新…

2025 年济南画室最新推荐排行榜权威发布,含小班教学、全封闭管理机构及素描课、寒暑假班、高考集训选择指南

随着济南艺考热度持续攀升,美术生及家长对优质画室的需求愈发迫切,但当前市场上画室数量繁杂,资质参差不齐。部分机构缺乏正规教学资质,师资水平不稳定,采用大班粗放教学模式,难以兼顾不同基础学生的学习需求;还…

2025 年贴片机优质厂家最新推荐排行榜:涵盖高精度高速固晶点胶等设备,助力企业精准选品高速/固晶/点胶/芯片/光模块贴片机厂家推荐

当前半导体、光电子等行业快速发展,贴片机作为核心生产设备,其品质与性能直接决定企业生产效率与产品质量。但市场上贴片机厂家众多,设备精度、工艺适配性、服务能力差异显著,企业采购时常面临 “选品难” 问题 —…

2025 年真空共晶回流焊炉生产厂家最新推荐排行榜:聚焦国内优质品牌,助力企业精准采购真空共晶炉/真空回流焊炉/真空甲酸炉/半导体焊接炉厂家推荐

随着半导体产业向高端化、精细化发展,真空共晶回流焊炉作为芯片封装核心设备,其性能直接决定下游产品质量与市场竞争力。当前市场中,设备厂商技术水平差异显著,部分产品存在温度控制精度不足、焊接空洞率超标等问题…