Hive-DML详解(超详细)

文章目录

  • 前言
  • HiveQL的数据操作语言(DML)
    • [1. 插入数据](#1. 插入数据)
      • [1.1 直接插入固定值](#1.1 直接插入固定值)
      • [1.2 插入查询结果](#1.2 插入查询结果)
    • [2. 更新数据](#2. 更新数据)
    • [3. 删除数据](#3. 删除数据)
      • [3.1 删除整个分区](#3.1 删除整个分区)
    • [4. 查询数据](#4. 查询数据)
      • [4.1 基本查询](#4.1 基本查询)
      • [4.2 条件筛选](#4.2 条件筛选)
      • [4.3 聚合函数](#4.3 聚合函数)
  • 总结

前言

本文将介绍HiveQL的数据操作语言(DML),包括插入数据、更新数据、删除数据和查询数据等常见操作。我们将详细讨论每个操作的语法和示例,帮助您更好地理解和使用HiveQL。


HiveQL的数据操作语言(DML)

1. 插入数据

在Hive中,可以使用INSERT INTO语句将数据插入到表中。以下是一些常见的插入数据的方法:

1.1 直接插入固定值

sql 复制代码
INSERT INTO table_name [PARTITION (partition_column = partition_value)]
VALUES (value1, value2, ...);
  • table_name:要插入数据的目标表名。
  • PARTITION(可选):如果目标表有分区,可以指定分区列和对应的值。
  • VALUES:要插入的具体数值。

例如,假设我们有一个名为"employees" 的表,并且包含了"id"、 "name" 和 "salary"等列。我们想要向该表中添加一条新记录:

sql 复制代码
INSERT INTO employees VALUES (1001, 'John Doe', 5000);

1.2 插入查询结果

除了直接指定固定值外,还可以通过查询结果来进行动态地插 入操作。

sql 复制代码
INSERT INTO table_name [PARTITION(partition_column = partition_value)]
SELECT column_list FROM source_table WHERE condition;
  • table_name:要将查询结果描绘到其中 的目标 表名。
  • column_list: 要从源 表选择并 描绘 到 目 标 表 中 的 列 名称列表。
  • 如果不提供列清单,则默认情况下会选择所有匹配条件行上存在于两个 表中的列。
  • source_table:要从中选择数据的源表名。
  • condition(可选):用于筛选源表数据的条件。

例如,假设我们有一个名为"employees_source" 的表,其中包含了员工信息。我们想要将薪资大于5000元的员工插入到目标 表 "employees" 中:

sql 复制代码
INSERT INTO employees SELECT * FROM employees_source WHERE salary > 5000;

2. 更新数据

在Hive中更新已存在于表格内部或者外部存储系统上某个特定行或者多行记录需要使用UPDATE语句。然而,在默认情况下,Hive不支持直接更新操作。

但是你仍然可以通过以下步骤实现类似于更新操作:

步骤一:创建一个新临时表temp_table来保存需要修改后结果集。

sql 复制代码
CREATE TABLE temp_table AS SELECT * FROM original_table;

步骤二:删除原始table并重命名temp_table为original_ table.

sql 复制代码
DROP TABLE original_table;
ALTER TABLE temp_table RENAME TO original_table ;

这样就完成了模拟更新操作。

3. 删除数据

Hive不支持使用DELETE语句来删除数据。

3.1 删除整个分区

如果您希望删除整个分区及其所有数据,则可以使用 ALTER TABLE 命令。

sql 复制代码
ALTER TABLE table_name DROP PARTITION (partition_column = partition_value);
  • table_name:要删除分区的目标表名。
  • partition_column:分区列名称。
  • partition_value:要删除的特定分区值。

例如,假设我们有一个名为"employees" 的表,其中包含了按照部门进行 分 区 的 数据。我们想要 删除 部 门 为 "IT" 的 所有员工记录:

sql 复制代码
ALTER TABLE employees DROP PARTITION (department = 'IT');

4. 查询数据

在Hive中,可以使用SELECT语句从表中检索数据。以下是一些常见的查询操作:

4.1 基本查询

最基本和常见的方式是使用简单 SELECT 语句来选择所有列或特定列。

sql 复制代码
-- 检索所有列
SELECT * FROM table_name;

-- 检索特定列
SELECT column1, column2, ... FROM table_name;

例如,假设我们有一个名为"employees" 的表,并且包含了"id"、 "name" 和 "salary"等 列 。我们想要检 索该 表 中 所有员工记录:

sql 复制代码
SELECT * FROM employees;

4.2 条件筛选

您可以通过WHERE子句添加条件来筛选所需行。

sql 复制代码
-- 使用 WHERE 子 句 进 行 条件 筛选 
SELECT column_list FROM table_name WHERE condition ;
  • column_list: 要选择并返回结果集中显示 的 列 名称列表。
  • table_ name:要从其进行数据检索 的目标表名。
  • condition:用于指定满足哪些行应该被返回到结果集中 的条件。

例如,假设我们只想获取薪资大于5000元的员工记录:

sql 复制代码
SELECT * FROM employees WHERE salary > 5000;

4.3 聚合函数

Hive支持各种聚合函数,如SUM、AVG、COUNT等。

sql 复制代码
SELECT aggregate_function(column) FROM table_name [WHERE condition];
  • aggregate_function:要应用的聚合函数,如SUM、AVG、COUNT等。
  • column:要计算的列名或表达式。
  • table_ name(可选):要从中进行数据检索 的目标表名。
  • condition(可选):用于筛选行的条件。

例如,我们想计算员工薪资总和:

sql 复制代码
SELECT SUM(salary) FROM employees;

总结

在本文中,我们学习了如何使用HiveQL进行各种常见的数据操作。首先,我们了解了如何插入固定值或通过查询结果来插入新记录。然后,我们探讨了模拟更新操作的方法,并介绍了删除整个分区的方式。

最后,在查询方面,我们学习了基本检索所有列或特定列以及条件筛选行记录的方法。此外,还介绍了聚合函数用于计算统计信息。

希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!

相关推荐
jiuweiC13 小时前
hive常用命令
hive
hweiyu0017 小时前
Hive 技术深度解析与 P7 数据分析架构师多行业全场景实战课程合集(视频教程)
hive·数据分析
笨蛋少年派2 天前
Hive安装部署
数据仓库·hive·hadoop
yumgpkpm3 天前
CMP(类ClouderaCDP7.3(404次编译) )完全支持华为鲲鹏Aarch64(ARM)使用 AI 优化库存水平、配送路线的具体案例及说明
大数据·人工智能·hive·hadoop·机器学习·zookeeper·cloudera
梦里不知身是客114 天前
hive的全连接
hive
Kay_Liang4 天前
【Hive 踩坑实录】从元数据库初始化到 HiveServer2 启动的全流程问题解决
大数据·linux·hive·hadoop·笔记·mysql·ubuntu
2501_938773995 天前
大数据离线处理:使用 Airflow 调度 Hive 脚本的工作流设计
大数据·hive·hadoop
Timer_Cooker5 天前
Hive 分区表变更字段长度不生效
数据仓库·hive·hadoop
2501_938782096 天前
《Ubuntu 系统下 MySQL 安装前的环境检查与依赖准备指南》
hive·mysql·ubuntu·adb
梦里不知身是客116 天前
hive的SQL语句练习2
hive·hadoop·sql