Hive-DML详解(超详细)

文章目录

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


前言

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


HiveQL的数据操作语言(DML)

1. 插入数据

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

1.1 直接插入固定值

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

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

INSERT INTO employees VALUES (1001, 'John Doe', 5000);

1.2 插入查询结果

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

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” 中:

INSERT INTO employees SELECT * FROM employees_source WHERE salary > 5000;

2. 更新数据

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

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

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

CREATE TABLE temp_table AS SELECT * FROM original_table;

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

DROP TABLE original_table;
ALTER TABLE temp_table RENAME TO original_table ;

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

3. 删除数据

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

3.1 删除整个分区

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

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

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

ALTER TABLE employees DROP PARTITION (department = 'IT');

4. 查询数据

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

4.1 基本查询

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

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

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

SELECT * FROM employees;

4.2 条件筛选

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

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

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

SELECT * FROM employees WHERE salary > 5000;

4.3 聚合函数

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

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

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

SELECT SUM(salary) FROM employees;

总结

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

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

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

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

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

相关文章

从单机应用到微服务,用户认证走几步?

用户认证指在用户访问服务的时候确认用户的身份,受限于HTTP无状态的特性,应用开发者需要自行实现用户认证相关功能。通常是用户登录时服务端生成通行证返回给客户端,客户端在接下来的请求中携带通行证,然后服务端通过校验该通行证…

P5175 数列(矩阵快速幂)

P5175 数列 anb(xan−1yan−2)2x2an−12y2an−222xyan−1an−2x2an−12y2an−222xyan−2(xan−2yan−3)x2an−12y2an−222xy(xan−22yan−2an−3)a_n ^ b \left(x \times a_{n - 1} y \times a_{n - 2}\right) ^ 2\\ x ^ 2 \times a_{n - 1} ^ 2 y ^ 2 \times a_{n - 2} ^ 2…

Spring bean 的初始化

先mark: https://www.cnblogs.com/yxh1008/p/6012230.html Bean的多种初始化、destory方法执行顺序 https://segmentfault.com/a/1190000014105687 https://blog.csdn.net/caihaijiang/article/details/8629725 Spring bean的初始化过程 https://www.jianshu.com…

编写优雅代码,从挖掉恶心的if/else 开始

背景长话短说, 作为开发人员经常需要根据条件灵活查询数据库,不管你是用rawsql 还是EFCore, 以下类似伪代码大家都可能遇到:特别是在大数据产品或者物联网产品中,字段甚多;if/else 写到死,一边写…

Spring bean 初始化顺序

InitializingBean, init-method 和 PostConstruct 1、概述 从接口的名字上不难发现,InitializingBean 的作用就是在 bean 初始化后执行定制化的操作。 Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特…

不要666升级版(数位DP,三次方和)

不要666升级版 ∑(presuc)2npre22pre∑suc∑suc2\sum(pre suc) ^ 2\\ n \times pre ^ 2 2 \times pre \sum suc \sum suc ^ 2\\ ∑(presuc)2npre22pre∑suc∑suc2 ∑(presuc)3∑(pre33pre2suc3presuc2suc3)npre33pre2∑suc3pre∑suc2∑suc3\sum (pre suc) ^ 3\\ \sum \left…

.NET Conf 2019 大会上发布.NET Core 3.0

北京时间今天凌晨如期在.NET Conf 上发布.NET Core 3.0,Keynotes 由Scott Hunter 主演,主要围绕.NET Core 3.0的新特性和社区展开。多功能性是.Net Core 成为我们的生活一部分的最好解释。如果您是Web开发人员还是想开发桌面或移动应用程序,如果您是游戏…

Spring AOP实现原理

先说结论: Spring AOP采用的是JDK动态代理 CGLIB动态代理模式。当当前类为接口的实现时,采用JDK动态代理,否则用CGLIB、 1、AOP 的存在价值 在传统 OOP 编程里以对象为核心,整个软件系统由系列相互依赖的对象所组成&#xff0c…

J. Product of GCDs(莫比乌斯反演)(2021牛客暑期多校训练营2)

Product of GCDs ∏d1nd∑[gcd⁡(s1d,s2d,…,skd)1]∏d1nd∑i1ndμ(i)Cf[id]k\prod_{d 1} ^{n} d ^{\sum[\gcd(\frac{s_1}{d}, \frac{s_2}{d}, \dots, \frac{s_k}{d}) 1]}\\ \prod_{d 1} ^{n} d ^{\sum\limits_{i 1} ^{\frac{n}{d}} \mu(i) C_{f[id]} ^{k}}\\ d1∏n​d∑[g…

微软推出Python免费在线教程视频

开源中国曾报道过最近微软针对 Python 初学者,推出了一套免费的教程视频。这套视频名为 Python for Beginners,该在线教学视频由微软高级项目经理 Christopher Harrison、以及微软 AI Gaming 的商业开发经理 Susan Ibach 共同讲解,在课程中加…

徒手实现Spring的IOC

Mark https://www.jianshu.com/p/9fe5a3c25ab6 https://juejin.im/post/5abe75f351882577b45f2336 https://blog.csdn.net/u012373815/article/details/74937913 https://xilidou.com/2018/01/08/spring-ioc/ IOC原理介绍: http://www.importnew.com/14751.htm…

HDU6956-Pass!(2021杭电多校一)(BSGS)

Pass! f(1)0,f(2)n−1,f(t)(n−2)f(t−1)(t−1)f(t−2)f(1) 0, f(2) n - 1, f(t) (n - 2) \times f(t - 1) (t - 1) \times f(t - 2)f(1)0,f(2)n−1,f(t)(n−2)f(t−1)(t−1)f(t−2),考虑对通项两边同时加一个xf(t−1)x \times f(t - 1)xf(t−1)。 可以得到f(t…

推荐neter常用优秀开源项目系列之一

.net社区有很多优秀的开源项目,我们今天先推荐6个开源项目;1.MassTransitMassTransit 是一个自由、开源、轻量级的消息总线, 用于使用. NET 框架创建分布式应用程序。MassTransit在现有消息传输上提供了一组广泛的功能, 从而使开发人员能够友好地使用基于…

spring四种依赖注入方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。 spring提出了依赖注入的思想,即依赖不由程序员控制,而是通过spring…

3085 吃遍赴丝码(分治)

3085 吃遍赴丝码 给定一个长度为nnn的数组,求∑i1n∑jin(j−i1)min{ai,…,aj}max{ai,…,aj}\sum\limits_{i 1} ^{n} \sum\limits_{j i} ^{n} (j - i 1) \times min\{a_i, \dots, a_j\} \times max\{a_i, \dots, a_j\}i1∑n​ji∑n​(j−i1)min{ai​,…,aj​}max…

聊聊高并发下库存加减那些事儿——“异步扣减库存”

聊聊高并发下库存加减那些事儿不定期福利发放哦聊聊高并发下库存加减那些事儿背景一般在日常开发中经常会遇到打折促销,秒杀活动,就如拼多多最近的4999抢券买爱疯11促销活动,毕竟谁的钱也不是大风刮来的,有秒杀有促销必定带来大量…

什么是MVC

什么是MVC? MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。 用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面&#xf…

P3242 [HNOI2015] 接水果(整体二分、扫描线)

P3242 [HNOI2015] 接水果 给定一棵树,定义给定了ppp个盘子,每个盘子是树上u,vu, vu,v两点的路径,且盘子有权值,定义水果,水果也是树上u,vu, vu,v两点间的路径。 有qqq个询问,每次给定u,v,ku, v, ku,v,k&a…

SpringMVC 、Struts的区别

先说结论:目前Spring MVC已经一统江山,Struts正在被抛弃 1、Spring MVC原理 Spring 体系: Spring MVC工作流程图 SpringMVC的工作流程描述 1. 用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获&#x…

P3700 [CQOI2017]小Q的表格(反演、分块)

P3700 [CQOI2017]小Q的表格 给定一个大小为nnn \times nnn的表格,初始时i,ji, ji,j位置上填的是f(i,j)ijf(i, j) i \times jf(i,j)ij,有mmm个操作,每次操作给定a,b,x,ka, b, x, ka,b,x,k,把格子a,ba, ba,b上的值改成xxx&#xf…