写点什么

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

作者:武子康
  • 2025-06-16
    山东
  • 本文字数:1997 字

    阅读完需:约 7 分钟

大数据-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 节点上。此时,我们在命令行中执行:


hive
复制代码


可以看到如下的执行效果


数据定义语言(DDL)

创建数据库

CREATE DATABASE IF NOT EXISTS mydb;
复制代码


  • 可加 LOCATION 指定 HDFS 路径。

  • 默认存放在 /user/hive/warehouse/mydb.db。

删除数据库

DROP DATABASE mydb [CASCADE];
复制代码


  • CASCADE 表示删除数据库及其中所有表。

创建表

内部表(Managed Table)


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


外部表(External Table)


CREATE EXTERNAL TABLE IF NOT EXISTS emp_ext (  id INT,  name STRING,  salary FLOAT)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LOCATION '/user/hadoop/empdata';
复制代码


  • 外部表不会随 DROP TABLE 删除数据。

删除表

DROP TABLE IF EXISTS emp;
复制代码

数据操作语言(DML)

加载数据

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

插入数据

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

多表插入

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

查询结果插入新表

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

数据查询语言(SELECT)

基本查询

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

排序与限制

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

分组与聚合

SELECT dept, COUNT(*) AS cnt, AVG(salary) AS avg_salFROM empGROUP BY deptHAVING COUNT(*) > 5;
复制代码

联合与去重

SELECT name FROM emp1UNION ALLSELECT name FROM emp2;
复制代码


SELECT DISTINCT dept FROM emp;
复制代码

连接(Join)

内连接

SELECT a.id, a.name, b.dept_nameFROM emp aJOIN dept bON a.dept_id = b.id;
复制代码

左外连接

SELECT a.id, a.name, b.dept_nameFROM emp aLEFT JOIN dept b ON a.dept_id = b.id;
复制代码

右外连接 / 全外连接

RIGHT JOIN / FULL OUTER JOIN
复制代码

测试 Hive

show functions;
复制代码


执行结果如下图:


修改配置

vim hive-site.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>
复制代码


修改的结果如下图:


命令测试

hive: set;
复制代码



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


!ls;!clear;
复制代码


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


dfs -ls /;
复制代码


一些语句

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


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);
复制代码



发布于: 刚刚阅读数: 3
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-13-Hive 启动Hive DDL DML 增删改查 操作Hive的HQL_大数据_武子康_InfoQ写作社区