大数据-13-Hive 启动Hive DDL DML 增删改查 操作Hive的HQL

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI篇持续更新中!(长期更新)

目前2025年06月16日更新到: AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框架 私有部署 测试上手 架构研究,持续打造实用AI工具指南!📐🤖

💻 Java篇正式开启!(300篇)

目前2025年06月16日更新到: Java-44 深入浅出 Nginx - 底层进程机制 Master Worker 机制原理 常用指令 MyBatis 已完结,Spring 已完结,深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 目前2025年06月13日更新到: 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

章节内容

上一节我们完成了:

  • Hive简介
  • 安装配置
  • 下载、解压等等操作
  • 修改配置
  • MariaDB 安装
  • 启动配置
  • 建立用户 远程访问 刷新权限

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。

  • 2C4G 编号 h121
  • 2C4G 编号 h122
  • 2C2G 编号 h123

启动Hive

上一节我们配置好了环境,在 h121 节点上。 此时,我们在命令行中执行:

shell 复制代码
hive

可以看到如下的执行效果

数据定义语言(DDL)

创建数据库

sql 复制代码
CREATE DATABASE IF NOT EXISTS mydb;
  • 可加 LOCATION 指定 HDFS 路径。
  • 默认存放在 /user/hive/warehouse/mydb.db。

删除数据库

sql 复制代码
DROP DATABASE mydb [CASCADE];
  • CASCADE 表示删除数据库及其中所有表。

创建表

内部表(Managed Table)

sql 复制代码
CREATE TABLE IF NOT EXISTS emp (
  id INT,
  name STRING,
  salary FLOAT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

外部表(External Table)

sql 复制代码
CREATE EXTERNAL TABLE IF NOT EXISTS emp_ext (
  id INT,
  name STRING,
  salary FLOAT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/user/hadoop/empdata';
  • 外部表不会随 DROP TABLE 删除数据。

删除表

sql 复制代码
DROP TABLE IF EXISTS emp;

数据操作语言(DML)

加载数据

sql 复制代码
LOAD DATA LOCAL INPATH '/home/data/emp.csv' INTO TABLE emp;
-- LOCAL 表示从本地上传;省略则是从 HDFS

插入数据

sql 复制代码
INSERT INTO TABLE emp VALUES (1, 'Tom', 5000.0);

多表插入

sql 复制代码
FROM employees
INSERT INTO TABLE high_salary SELECT * WHERE salary > 8000
INSERT INTO TABLE low_salary SELECT * WHERE salary <= 8000;

查询结果插入新表

sql 复制代码
CREATE TABLE emp_copy AS SELECT * FROM emp;

数据查询语言(SELECT)

基本查询

sql 复制代码
SELECT id, name FROM emp WHERE salary > 5000;

排序与限制

sql 复制代码
SELECT * FROM emp ORDER BY salary DESC LIMIT 10;

分组与聚合

sql 复制代码
SELECT dept, COUNT(*) AS cnt, AVG(salary) AS avg_sal
FROM emp
GROUP BY dept
HAVING COUNT(*) > 5;

联合与去重

sql 复制代码
SELECT name FROM emp1
UNION ALL
SELECT name FROM emp2;
sql 复制代码
SELECT DISTINCT dept FROM emp;

连接(Join)

内连接

sql 复制代码
SELECT a.id, a.name, b.dept_name
FROM emp a
JOIN dept b
ON a.dept_id = b.id;

左外连接

sql 复制代码
SELECT a.id, a.name, b.dept_name
FROM emp a
LEFT JOIN dept b ON a.dept_id = b.id;

右外连接 / 全外连接

sql 复制代码
RIGHT JOIN / FULL OUTER JOIN

测试Hive

shell 复制代码
show functions;

执行结果如下图:

修改配置

shell 复制代码
vim hive-site.xml

增加如下内容:

xml 复制代码
<!-- 数据默认的存储位置(HDFS) -->
<property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>location of default database for the warehouse</description>
</property>
<!-- 在命令行中,显示当前操作的数据库 -->
<property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
        <description>Whether to include the current database in the Hive prompt.</description>
</property>
<!-- 在命令行中,显示数据的表头 -->
<property>
        <name>hive.cli.print.header</name>
        <value>true</value>
</property>
<!-- 操作小规模数据时,使用本地模式,提高效率 -->
<property>
        <name>hive.exec.mode.local.auto</name>
        <value>true</value>
        <description>Let Hive determine whether to run in local mode automatically</description>
</property>

修改的结果如下图:

命令测试

shell 复制代码
hive: set;

可以在 Hive 控制台中,执行操作系统的指令:

shell 复制代码
!ls;
!clear;

可以在 Hive 控制台中,执行 DFS 的指令:

shell 复制代码
dfs -ls /;

一些语句

编写一些语句,对 Hive 进行其他简单的测试:

shell 复制代码
select array(1,2,3);
select arr[0] from (select array(1,2,3) arr) tmp;
select map('a',1,'b',2,'c',3);
select mymap["a"] from (select map('a', 1, 'b', 2, 'c',3) as mymap) tmp;
select struct('username1', 7, 1288.68);
相关推荐
老邓计算机毕设7 分钟前
Springboot乐家流浪猫管理系统16lxw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
武子康7 分钟前
大数据-88 Spark Super Word Count 全流程实现(Scala + MySQL)
大数据·后端·spark
知其然亦知其所以然8 分钟前
别再只会背八股了!一文带你彻底搞懂UNION与UNION ALL的区别
后端·mysql·面试
羑悻11 分钟前
再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!
后端
就是帅我不改12 分钟前
99%的Java程序员都踩过的高并发大坑
后端·面试
BingoGo12 分钟前
PHP Swoole/WebMan/Laravel Octane 等长驻进程框架内存泄露诊断与解决方案
后端·php
秦清13 分钟前
组态可视化软件【导入属性】
前端·javascript·后端
用户40993225021214 分钟前
为什么你的单元测试需要Mock数据库才能飞起来?
后端·ai编程·trae
hwjfqr20 分钟前
VSCode终端中文乱码问题解决
前端·后端
费益洲27 分钟前
用 Shields.io 定制 README 个性徽章
后端