Hive 查询介绍——它们是什么以及如何有效地编写它们

在大数据领域,Hive 是一个大问题。精心编写和精心设计的 Hive 查询可加速从数据集中检索数据。 Hive 比 SQL 好得多,因为前者可以更有效地处理复杂数据。此外,Hive 查询有助于降低处理成本。这就是为什么为大数据分析用户和开发人员正确编写和优化 Hive 查询至关重要。

与其他可用的数据处理平台相比,完全优化的数据查询以更快的速度为您提供所需的数据。高效有效的 Hive 查询可以减少 50% 的执行时间。当您的数据处理框架运行得更快时,好处就会增加。

回答这个问题首先要准确理解 Hive 到底是什么。 Apache Hive 是一个在 Hadoop 之上开发的开源数据仓库平台,用于执行数据分析和分布式处理。 Facebook 创建了 Apache Hive 以减少编写 Java MapReduce 平台所需的工作。

大数据流程需要快速准确地处理大量不同的数据,以提供高度可行的见解。如果手动完成,这是一项不可能完成的任务。 Hive 的存在是为了简化大数据处理,并通过快速 Hive 查询将原始数据转化为可操作的内容。

使用 Hive 进行查询和数据分析比使用 MapReduce 框架更容易、更快,即使在处理大型数据集时也是如此。为简单起见,我们将重点关注 MapReduce 作为主要执行引擎,了解 Hive 还可以利用 Tez、Tez LLAP 和 Spark。 MapReduce 是一个低级平台,需要多个自定义程序才能运行。开发人员必须熟悉 Java,它已经是一个复杂的平台,才能充分利用 MapReduce。相比之下,您无需成为 Java 专家即可使用 Hive。

通常,Hive 查询只是对信息的请求。当在数据科学和计算机编程的上下文中使用时,Hive 查询是同一回事。不同之处在于信息直接来自数据库。

Hive 查询不仅仅是随机信息请求。您要检索的信息必须具体。因此,您可以使用一组预定义代码和数据库原生的编程语言来编写和优化 Hive 查询。一旦数据库收到并理解该指令,它就会收集查询中指定的所有信息并发布您请求的数据。

要真正从您的查询中获得最大价值,它们必须写得很好并且经过专业调整。但在此之前,让我们深入了解您需要了解的关于它们的其他信息。

用于创建数据库管理任务和流程的标准编程语言称为结构化查询语言 (SQL)。但是,SQL 并不是使用 Hive 执行查询和数据分析的唯一编程语言。 AQL、Datalog 和 DMX 也是流行的选择。

Hive 查询语言或 HiveQL 是一种类似于 SQL 的声明性语言。 HiveQL 所做的是将这些查询转换为 MapReduce 程序。它还使开发人员能够通过将复杂的 MapReduce 程序替换为 Hive 查询来处理和分析结构化和半结构化数据。

任何熟悉 SQL 命令的开发人员都会发现使用 Hive 查询语言创建请求很容易。

分区、表和桶的创建

您可以在 Hive 中创建查询,以将存储在 Hadoop 文件中的大型数据集分类到表、分区和存储桶中。在每个模型中,您根据分区或列键对相同类型的数据进行分组。可以有一个或多个分区键来帮助查明特定分区。分区数据集加速了对数据切片的查询。

ETL 功能

在将数据加载到其目标数据存储之前,您需要使用 ETL(提取、转换和加载)功能清理、准备和转换该数据。 Hive 查询可以做到这一点。数据通常从源中提取,然后存储在通用或兼容的存储中,例如 Azure Data Lake Storage 或 Azure Storage blob。然后一系列查询转换数据。在此之后,数据在 Apache Hive 中进行组织,然后再批量加载到其目标数据仓库中。

创建用于合并不同数据表的连接

Hive 查询可以包括连接,这是一种用于通过使用每个表共享的值来组合来自两个或多个表的特定字段或记录的功能。联接在速度方面以指数方式提高 Hive 查询的效率,具体取决于查询的编写方式。例如,当它们首先对最小表进行流式处理,最后对最大表进行流式传输时,带有连接子句的查询执行得更快,而不是相反。

有四种类型的连接,对每一种类型的深入了解将帮助用户选择正确的连接来使用——并编写正确的查询。这四种类型的连接是:

按查询排序

HiveQL 中的 ORDER BY 语法使用“SELECT”语句来帮助对数据进行排序。此语法遍历 Hive 表上的列,以按照“Order by”子句中的说明查找和筛选特定列值。查询只会选取 Order by 子句中提到的列名,并以升序或降序显示匹配的列值。

按查询分组

当 Hive 查询带有“GROUP BY”时,它会探索 Hive 表上的列并收集 group by 子句中提到的所有列值。查询将仅查看名称定义为“group by”子句的列,并将通过对特定和匹配的列值进行分组来显示结果。

按查询排序

当 Hive 查询带有“排序依据”子句时,它会遍历查询定义的名称下的列。执行后,查询会探索 Hive 表的列以对输出进行排序。如果您使用“DESC”指令按查询排序,您将按降序排序和显示结果。带有“ASC”的查询将执行升序排序并以类似方式显示结果。

按查询聚类

带有 CLUSTER BY 子句或命令的 Hive 查询通常部署在查询中以同时执行 DISTRIBUTE BY 和 SORT BY 的功能。此特定查询可确保对所有输出数据文件进行绝对排序或排序。

分配方式

DISTRIBUTE BY 指令确定输出如何在 MapReduce 作业中的缩减程序之间分配。 DISTRIBUTE BY 的功能类似于 GROUP BY 子句,因为它管理如何将数据行加载到 reducer 中进行处理。

查看另一篇博文,您将在其中了解如何通过 Hive 查询优化来充分利用 Hive 查询。

以下是您在管理 Hive 查询时会遇到的常见命令的简要介绍。

Hive 数据定义语言 (DDL) 命令

Apache Hive 备忘单是一个包含所有 Apache Hive 语法和函数的五部分摘要。为开发人员和大数据工程师提供参考或指导。

Apache Hive 备忘单分为以下部分:

Hive 查询会消耗资源。在大数据的世界里,资源就是金钱,资源的低效利用可能会阻碍任何组织。因此,Hive 查询优化对于将资源消耗保持在最低水平、运营成本可控以及整体性能处于最佳水平至关重要。

以下是优化 Hive 查询的一些有效方法:

针对我们所有的查询优化您的方法至关重要。 Pepperdata 为企业提供大数据优化解决方案,旨在为他们的查询、Query Spotlight 以及他们的所有堆栈、应用程序、流程等提供全面的可见性和可观察性。用户享受实时性能报告和数据驱动的建议,以优化其大数据基础架构及其所有组件的性能,同时显着降低运营成本。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627