大数据-14-Hive HQL 表连接查询 HDFS导入导出 逻辑运算 函数查询 全表查询

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

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

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

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

目前2025年06月17日更新到: Java-48 深入浅出 Tomcat 手写 Tomcat 实现【01】 MiniCat Bootstrap HttpServlet Request Response MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat正在更新,深入浅出助你打牢基础!

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

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

章节内容

上一节我们完成了:

  • 启动Hive
  • 测试Hive
  • 修改配置
  • 简单测试

背景介绍

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

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

数据导入

在 Hive 中,HQL(Hive Query Language)支持多种数据的导入与导出方式,用于将数据写入 Hive 表或从表中导出至本地/HDFS/其他系统。这些操作本质上依赖于 HDFS、MapReduce、Hive 的存储和查询机制。

从本地文件导入数据(LOAD DATA LOCAL)

sql 复制代码
LOAD DATA LOCAL INPATH '/path/to/local/file.txt' INTO TABLE my_table;
  • LOCAL:表示文件在客户端本地;不写 LOCAL 则表示是 HDFS 上的路径。
  • INTO:表示保留原有数据;使用 OVERWRITE 则会清空表中原数据。
  • 要求目标表必须已存在。
  • 文件格式必须与表定义一致(例如分隔符)。
sql 复制代码
LOAD DATA LOCAL INPATH '/home/hadoop/data.csv' OVERWRITE INTO TABLE emp;

从 HDFS 导入数据(LOAD DATA)

sql 复制代码
LOAD DATA INPATH '/user/hadoop/file.txt' INTO TABLE my_table;
  • 文件需预先放置于 HDFS 中(使用 hdfs dfs -put)。
  • 适用于大文件。

使用 INSERT 导入查询结果

将查询结果插入到目标表:

sql 复制代码
INSERT INTO TABLE my_table
SELECT * FROM another_table WHERE age > 30;

或覆盖已有数据:

sql 复制代码
INSERT OVERWRITE TABLE my_table
SELECT * FROM another_table WHERE age > 30;
  • 可用于不同表、不同字段映射的结构化导入。
  • 也可以和 PARTITION、DYNAMIC PARTITION 配合使用。

使用外部表读取已有 HDFS 数据

sql 复制代码
CREATE EXTERNAL TABLE my_table (
  id INT,
  name STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/hadoop/data/';
  • Hive 不会管理该目录数据的生命周期。
  • 删除表不会删除 HDFS 上的数据。

使用 Sqoop 导入关系型数据库数据(常见于 MySQL → Hive)

shell 复制代码
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root --password root \
--table emp \
--hive-import \
--hive-table emp_hive

数据导出

查询导出到本地(INSERT OVERWRITE DIRECTORY)

sql 复制代码
INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/output'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM emp;
  • LOCAL 表示导出到本地文件系统;不写则导出到 HDFS。
  • 结果存储为纯文本文件,适合进一步处理或使用。

查询导出到 HDFS

sql 复制代码
INSERT OVERWRITE DIRECTORY '/user/hadoop/output'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT id, name FROM emp;

使用 Hive EXPORT 导出整个表数据和元数据

sql 复制代码
EXPORT TABLE emp TO '/user/hive/backup/emp_export';
  • 会在指定路径下创建表结构和数据的拷贝(备份用途)。
  • 配合 IMPORT 可将整个表恢复或迁移到另一 Hive 实例。

Sqoop 导出到关系型数据库(如 Hive → MySQL)

shell 复制代码
sqoop export \
--connect jdbc:mysql://localhost/db \
--username root --password root \
--table emp \
--export-dir /user/hive/warehouse/emp \
--input-fields-terminated-by '\001'

使用建议

  • 本地 CSV 小文件 → Hive:LOAD DATA LOCAL INPATH
  • 大文件导入:HDFS + LOAD DATA INPATH
  • 结构化转换/插入:INSERT INTO/OVERWRITE TABLE
  • 查询结果导出为文件:INSERT OVERWRITE DIRECTORY
  • Hive → Hive 迁移:EXPORT + IMPORT
  • Hive ↔ MySQL:使用 Sqoop

实机测试

默认格式

将查询结果导出到本地

shell 复制代码
insert overwrite local directory '/opt/wzk/hive_test/tabC'
select * from tabC;

我们查看目录,已经导出了:

使用 vim 工具查看具体内容:

shell 复制代码
5^Awangwu^ABJ^A202407
4^Alishi^ASH^A202407
3^Azhangsan^ATJ^A202407

自定格式

我们发现,默认格式导出的有一些符号,我们可以指定符号:

shell 复制代码
insert overwrite local directory '/opt/wzk/hive_test/tabC2'
row format delimited fields terminated by ' '
select * from tabC;

同样,我们使用 vim 工具打开查看情况:

shell 复制代码
5 wangwu BJ 202407
4 lishi SH 202407
3 zhangsan TJ 202407

导出至HDFS

shell 复制代码
insert overwrite directory '/wzk/hive_test/tabC3'
row format delimited fields terminated by ' '
select * from tabC;

执行结果如下:

我们查看 HDFS 内容,可以看到:

HQL

新建文件

新建一个文本文件,写入如下的内容,用作后续的测试

shell 复制代码
7369,SMITH,CLERK,7902,2010-12-17,800,,20
7499,ALLEN,SALESMAN,7698,2011-02-20,1600,300,30
7521,WARD,SALESMAN,7698,2011-02-22,1250,500,30
7566,JONES,MANAGER,7839,2011-04-02,2975,,20
7654,MARTIN,SALESMAN,7698,2011-09-28,1250,1400,30
7698,BLAKE,MANAGER,7839,2011-05-01,2850,,30
7782,CLARK,MANAGER,7839,2011-06-09,2450,,10
7788,SCOTT,ANALYST,7566,2017-07-13,3000,,20
7839,KING,PRESIDENT,,2011-11-07,5000,,10
7844,TURNER,SALESMAN,7698,2011-09-08,1500,0,30
7876,ADAMS,CLERK,7788,2017-07-13,1100,,20
7900,JAMES,CLERK,7698,2011-12-03,950,,30
7902,FORD,ANALYST,7566,2011-12-03,3000,,20
7934,MILLER,CLERK,7782,2012-01-23,1300,,10

上传文件

将文件上传至 HDFS

shell 复制代码
hdfs dfs -put test02.txt /wzk/hive_test/test02.txt

创建新表

shell 复制代码
CREATE TABLE emp (
  empno int,
  ename string,
  job string,
  mgr int,
  hiredate DATE,
  sal int,
  comm int,
  deptno int
)row format delimited fields terminated by ",";

我们将数据加载到Hive中

shell 复制代码
LOAD DATA LOCAL INPATH '/opt/wzk/hive_test/test02.txt'
INTO TABLE emp;

全表查询

shell 复制代码
SELECT * FROM emp;

可以看到数据已经按照我们的想法导入了:

部分字段查询

这与我们平常写SQL基本是一样的:

shell 复制代码
select ename, sal, comm from emp;

函数查询

shell 复制代码
select sum(sal) from emp;
select max(sal) from emp;
select min(sal) from emp;
select avg(sal) from emp;

限制条数

shell 复制代码
select * from emp limit 3;

WHERE

shell 复制代码
select * from emp
where sal > 2000;

逻辑运算

shell 复制代码
select null=null;
select null==null;
select null<=>null;
select * from emp where comm is null;
select * from emp where deptno in (20, 30);

GROUP BY

shell 复制代码
select deptno, avg(sal)
from emp
group by deptno;

ORDER BY

shell 复制代码
select * from emp order by deptno;
相关推荐
青柠编程1 小时前
基于Spring Boot的竞赛管理系统架构设计
java·spring boot·后端
土丁爱吃大米饭1 小时前
重磅!Repo Wiki!
大数据·词法分析·语义分析·语法分析·qoder·repo wiki
问道飞鱼1 小时前
【大数据技术】ClickHouse配置详细解读
大数据·clickhouse·配置信息
s9123601012 小时前
【rust】 pub(crate) 的用法
开发语言·后端·rust
ModelWhale3 小时前
喜报!和鲸科技获张江国家自主创新示范区专项发展资金支持
大数据·人工智能·科研
RoboWizard3 小时前
移动固态硬盘无法被电脑识别怎么办?
大数据·人工智能·缓存·电脑·金士顿
阿里云大数据AI技术3 小时前
云栖2025 | 阿里云自研大数据平台 ODPS 重磅升级:全面支持AI计算和服务
大数据·阿里云·odps·云栖大会
夕颜1114 小时前
关于排查问题的总结
后端
伊织code4 小时前
Elasticsearch - 分布式搜索与分析引擎
大数据·分布式·elasticsearch
码事漫谈4 小时前
揭秘RAG的核心引擎:Document、Embedding与Retriever详解
后端