【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

终极指南:使用 Hive 有效地删除分区数据 (终极指南针官方网站)

用户投稿2024-04-15热门资讯21

Hive 是 Apache Hadoop 生态系统中的一个数据仓库工具,专门用于处理大规模数据。Hive允许用户使用类似 SQL 的语言(称为 HiveQL)查询和操作存储在 Hadoop 分布式文件系统 (HDFS) 中的数据。

什么是分区数据?

分区数据是一种数据组织技术,可将表中的数据按特定列(称为分区列)的值分组。分区数据使查询和处理特定数据子集变得更加高效,因为它允许 Hive 直接访问相关数据分区,而无需扫描整个表。

为什么删除分区数据很重要?

从 Hive 表中删除分区数据有多种原因,其中包括:

  • 释放存储空间:删除不再需要的数据可以释放 HDFS 中的存储空间。
  • 提高性能:删除分区数据可以减少 Hive 表的大小,从而提高查询和处理性能。
  • 数据清理:删除分区数据可以用于清理不再准确或相关的数据。

使用 Hive 删除分区数据的方法

有几种方法可以使用 Hive 删除分区数据,包括:

使用 DROP PARTITION 语句

此方法用于删除单个分区或一组分区。语法如下:

DROP PARTITION table_name PARTITION (partition_column_name = partition_value);
例如,要删除表 `sales` 中分区列 `date` 值为 `2023-01-01` 的分区,可以使用以下命令:
DROP PARTITION sales PARTITION (date = '2023-01-01');

使用 TRUNCATE PARTITION 语句

此方法用于删除分区中的所有数据,但不删除分区本身。语法如下:

TRUNCATE PARTITION table_name PARTITION (partition_column_name = partition_value);
例如,要删除表 `sales` 中分区列 `date` 值为 `2023-01-01` 分区中的所有数据,可以使用以下命令:
TRUNCATE PARTITION sales PARTITION (date = '2023-01-01');

使用 ALTER TABLE ... DROP PARTITION 语句

此方法与 `DROP PARTITION` 语句类似,但允许一次删除多个分区。语法如下:

ALTER TABLE table_name DROP PARTITION (partition_value_1, partition_value_2, ...);
例如,要删除表 `sales` 中分区列 `date` 值为 `2023-01-01` 和 `2023-01-02` 的两个分区,可以使用以下命令:
ALTER TABLE sales DROP PARTITION ('2023-01-01', '2023-01-02');

最佳实践

在使用 Hive 删除分区数据时,请考虑以下最佳实践:

  • 确定要删除的分区:在删除任何分区之前,请务必确定要删除哪一个。可以使用 `SHOW PARTITIONS` 语句查看表中的分区。
  • 备份数据:在删除分区数据之前,请确保已备份数据。这样可以防止意外数据丢失。
  • 使用适当的方法:根据要删除的分区数量和类型,选择最合适的方法。对于单个分区,`DROP PARTITION` 语句就足够了。对于多个分区或删除分区中的所有数据,`ALTER TABLE` 语句更有效。
  • 优化 Hive 配置:通过调整 `hive.exec.max.dynamic.partitions` 和 `hive.exec.max.created.files` 等配置,可以优化 Hive 表和分区的性能。

结论

有效地删除 Hive 中的分区数据对于管理数据、释放存储空间和提高查询性能至关重要。通过了解不同方法和最佳实践,您可以有效地从 Hive 表中删除分区数据,并充分利用该工具功能。


hive中怎样删除分区

准备好环境,小编这边环境已经有了,就不讲解如何搭建环境,毕竟搭建一套大数据需要一段时间的。 准备一个分区表show partitions 表名方法1:使用hive自带sql语法进行删除alter table 表名 drop partition (etl_dt=);再次查看分区还在不在,如果分区不在了,说明该分区已经被删除,数据也已被清空。 show partitions 表名;方法2:采用hdfs命令进行清空这个表还剩下一个分区,咱们把这个分区也清空。 先使用hdfs查看该表实际分区以及数据目录在哪hdfs dfs -ls /user/hive/warehouse//表名小写/或者hadoop fs -ls /user/hive/warehouse//表名小写/两个命令效果一样使用hdfs命令删除该分区目录hdfs dfs -rm -r -f /user/hive/warehouse//表名小写/etl_dt=最后在查看没有分区目录了最查看进hive命令行查看此表是否还有数据

如何编写更好的SQL查询:终极指南-第一部分

首先,应该了解学习SQL对于数据挖掘分析这个工作的重要性;接下来,应该先学习SQL查询语句的处理和执行过程,以便可以更好的了解到,编写高质量的查询有多重要。 具体说来就是,应该了解查询是如何被解析、重写、优化和最终评估的;掌握了上面一点之后,你不仅需要重温初学者在编写查询语句时,所使用的查询反向模型,而且还需要了解有关可能发生错误的替代方案和解决方案。 同时还应该了解更多查询工作中的基于集合的程序方法。 在性能方面也需要关注反向模型,除了手动提高SQL查询的方法外,还需要以更加结构化和深入的方式来分析你的查询,以便使用其它工具来完成整个查询工作。 在执行查询之前,还需要更加深入的了解执行查询计划的时间复杂度。 最后,应该了解如何进一步的调整你的查询语句。 为什么要学SQL?寻找数据挖掘分析行业的工作,SQL是最需要的技能之一,不论是申请数据分析工作、数据引擎工作、数据挖掘分析或者其它工作。 在O‘Reilly发布的《2016数据科学从业者薪酬报告》中,有70%的受访者证实了这一点,表示他们需要在专业环境中使用SQL。 此外,本次调查中,SQL远胜于R(57%)和Python(54%)等编程语言。 所以在数据挖掘分析领域,SQL是必备技能。 我们分析一下SQL从1970s早期开发出,到现在还经久不衰的原因:一、公司基本都将数据存储在关系数据库管理系统(RDBMS)或关系数据流管理系统(RDSMS)中,所以需要使用SQL来实现访问。 SQL是通用的数据语言,可以使用SQL和几乎其它任何数据库进行交互,甚至可以在本地建立自己的数据库!二、只有少量的SQL实现没有遵循标准,在供应商之间不兼容。 因此,了解SQL标准是在数据挖掘分析行业立足的必要要求。 三、最重要的是SQL也被更新的技术所接受,例如Hive或者Spark SQL。 Hive是一个用于查询和管理大型数据集的类似于SQL的查询语言界面;Spark SQL可用于执行SQL查询。 简而言之,以下就是为什么你应该学习这种查询语言:即使对于新手来说,SQL也很容易学习。 学习曲线很平缓,编写SQ查询几乎不花费时间。 SQL遵循“学习一次,随时随地可用”的原则,所以花费时间学习SQL很划算!SQL是对编程语言的一种极好的补充;在某些情况下,编写查询甚至比编写代码更为优先!处理和查询执行为了提高SQL查询的性能,首先需要知道,运行查询时,内部会发生什么。 以下时查询执行的过程:首先,将查询解析成“解析树”;分析查询是否满足语法和语义要求。 解析器将会创建一个输入查询的内部表示,然后将此输出传递给重写引擎。 然后,优化器的任务是为给定的查询,寻找最佳执行或查询计划。 执行计划准确地定义了每个操作所使用的算法,以及如何协调操作的执行。 最后,为了找到最佳的执行计划,优化器会列举所有可能的执行计划,并确定每个计划的质量或成本,以便获取有关当前数据库状态的信息,最后选择最佳的执行计划。 由于查询优化器可能不完善,因此数据库用户和管理员有时需要手动检查并调整优化器生成的计划,以便获得更好的性能。 现在你已经清楚了什么才是好的执行计划。 正如前面了解到的,计划的成本质量起着重要的作用。 更具体地说,评估计划所需的磁盘I / O数量,计划的CPU花销以及数据库客户端的整体响应时间和总执行时间等因素至关重要。 这就是时间复杂性的概念。 后面还将继续了解。 接下来,执行所选择的查询计划,由系统的执行引擎进行评估,并返回查询结果。 编写SQL查询需要进一步说明的是,废品回收原则(GIGO)原本就是表达在查询处理和执行之中:制定查询的人,同时也决定着SQL查询的性能。 这意味着在编写查询,有些事情可以同步去做。 就像文章开始时介绍的,编写查询需要遵循两个标准:首先,编写的查询需要满足一定的标准,其次还应该应对查询中可以出现的性能问题。 总的来说,有四个分句和关键字,方便新手考虑性能问题:WHERE分句INNER JOIN和LEFT JOIN关键字HAVING分句虽然这种做法简单而天真,但对于一个初学者来说,这些方法却是一个很好的指引。 这些地方也是你刚开始编写时,容易发生错误的地方,这些错误也很难发现。 同时,要想提升性能,使其变得有意义,就不能脱离上下文:在考虑SQL性能时,不能武断的认为上面的分句和关键字不好。 使用WHERE或HAVING的分句也可能是很好的查询语句。 通过下面的章节来来进一步了解编写查询时反向模型和代替方法,并将这些提示和技巧作为指导。 如何重写查询和是否需要重写查询取决于数据量,以及数据库和执行查询所需的次数等。 这完全取决于你的查询目标,事先掌握一些有关数据的知识是非常重要的!1. 仅检索你需要的数据在编写SQL查询时,并不是数据越多越好。 因此在使用SELECT语句、DISTINCT分句和LIKE操作符时,需要谨慎。 SELECT声明在编写完查询语句之后,首先需要做的事情就是检查select语句是否简洁。 你的目标应该是删除不必要的select列。 以便只取到符合你查询目的的数据。 如果还有相关使用exists的子查询,那么就应该在select语句中使用常量,而不是选择实际列的值。 当检查实体时,这是特别方便的。 请记住,相关子查询是使用外部查询中的值的子查询,并且在这种情况下,NULL是可以作为“常量”的,这点确实令人困惑!通过以下示例,可以了解使用常量的含义:SELECTdriverslicensenr,nameFROMDriversWHEREEXISTS(SELECT‘1‘=);提示:我们很容易发现,使用相关子查询并不总是一个好主意,所以可以考虑通过以下方式避免使用相关子查询,例如使用INNER JOIN重写:SELECTdriverslicensenr,=;DISTINCT分句SELECT DISTINCT语句用于返回不同的值。 DISTINCT是一个分句,能不用尽量不用,因为如果将DISTINCT添加到查询语句中,会导致执行时间的增加。 LIKE运算符在查询中使用LIKE运算符时,如果模式是以%或_开始,则不会使用索引。 它将阻止数据库使用索引(如果存在的话)。 当然,从另一个角度来看,你也可以认为,这种类型的查询可能会放宽条件,会检索到许多不一定满足查询目标的记录。 另外,你对存储在数据中数据的了解,可以帮助你制定一个模式,使用该模式可以对所有数据进行正确的过滤,以便查找到你最想要的数据。 2. 缩小查询结果如果无法避免使用SELECT语句时,可以考虑通过其它方式缩小查询结果。 例如,使用LIMIT分句和数据类型转换的方法。 TOP,LIMIT和ROWNUM分句可以在查询中添加LIMIT或TOP分句,来设置查询结果的最大行数。 下面是一个示例:SELECTTOP3*FROMDrivers;请注意,你可以进一步指定PERCENT。 例如,如果你想更改查询的第一行SELECT TOP 50 PERCENT *。 SELECTdriverslicensenr,nameFROMDriversLIMIT2;此外,你还可以添加ROWNUM分句,相应于在查询中使用的LIMIT:SELECT*FROMDriversWHEREdriverslicensenr=ANDROWNUM<=3;数据类型转换应该使用最小的数据类型,因为小的数据类型更加有效。 当查询中需要进行数据类型转化,会增加执行时间,所以尽可能的避免数据类型转换的发生;如果不能避免的话,需要谨慎的定义数据类型的转换。 本文是本系列教程的第一篇,后续还有更多《如何编写更好的SQL查询》的文章分享给大家,敬请期待。 原文链接:转载请注明出自:葡萄城控件本文出自 “葡萄城控件技术团队博客” 博客,请务必保留此出处如何编写更好的SQL查询:终极指南-第一部分标签:查询语句sql

hive使用教程(2)--数据导入导出、查询与排序

1.语法

(1)load data:表示加载数据

(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表

(3)inpath:表示加载数据的路径

(4)overwrite:表示覆盖表中已有数据,否则表示追加

(5)into table:表示加载到哪张表

(6)student:表示具体的表

(7)partition:表示上传到指定分区

2.实操案例

(0)创建一张表

(1)加载本地文件到hive

(2)加载HDFS文件到hive中

上传文件到HDFS

加载HDFS上数据

(3)加载数据覆盖表中已有的数据

上传文件到HDFS

加载数据覆盖表中已有的数据

1.创建一张分区表

2.基本插入数据

3.基本模式插入(根据单张表查询结果)

4.多插入模式(根据多张表查询结果)(有问题,只是查询单表不同分区的)

根据查询结果创建表(查询的结果会添加到新创建的表中)

1.创建表,并指定在hdfs上的位置

2.上传数据到hdfs上

3.查询数据

注意:先用export导出后,再将数据导入。

1.将查询的结果导出到本地

2.将查询的结果格式化导出到本地

3.将查询的结果导出到HDFS上(没有local)

基本语法:(hive -f/-e 执行语句或者脚本 > file)

后续..............................。

注意:Truncate只能删除管理表,不能删除外部表中数据

1.全表查询

2.选择特定列查询

注意:

(1)SQL 语言大小写不敏感。

(2)SQL 可以写在一行或者多行

(3)关键字不能被缩写也不能分行

(4)各子句一般要分行写。

(5)使用缩进提高语句的可读性。

1.重命名一个列

2.便于计算

3.紧跟列名,也可以在列名和别名之间加入关键字‘AS’

4.案例实操

查询名称和部门

(1)where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。 (2)where后面不能写分组函数,而having后面可以使用分组函数。 (3)having只用于group by分组统计语句。

空字段赋值

需求 求出不同部门男女各多少人。结果如下:

创建本地emp_,导入数据

创建hive表并导入数据

按需求查询数据

Order By:全局排序,一个Reducer

1.使用 ORDER BY 子句排序

终极指南:使用 Hive 有效地删除分区数据 (终极指南针官方网站) 第1张

ASC(ascend): 升序(默认)

DESC(descend): 降序

2.ORDER BY 子句在SELECT语句的结尾

3.案例实操

(1)查询员工信息按工资升序排列

(2)查询员工信息按工资降序排列

按照员工薪水的2倍排序

按照部门和工资升序排序

Sort By:每个Reducer内部进行排序,对全局结果集来说不是排序。

1.设置reduce个数

2.查看设置reduce个数

3.根据部门编号降序查看员工信息

4.将查询结果导入到文件中(按照部门编号降序排序)

Distribute By:类似MR中partition,进行分区,结合sort by使用。

注意,Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。

对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。

案例实操:

当distribute by和sorts by字段相同时,可以使用cluster by方式。

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。

1)以下两种写法等价

注意:按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去。

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

终极指南:使用 Hive 有效地删除分区数据 (终极指南针官方网站) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!