序幕
HiveQL 是 SQL-92、MySQL 和 Oracle 的混合体
SQL方言。它还提供来自后来的 SQL 标准的功能,例如窗口函数。此外,HiveQL 扩展了一些不属于 SQL 标准的特性。它们受到 MapReduce 的启发,例如多表插入。
简而言之,由于 Apache Hive 是一种基于 Hadoop 的数据仓库,因此您可以通过类似 SQL 的 HiveQL 使用基于 Java 的 MapReduce 功能分析数据。
使用 Spark SQL,您可以读取和写入各种结构化格式的数据,其中之一就是 Hive 表。 Spark SQL 支持符合 ANSI SQL:2003 的命令和 HiveQL。简而言之,您可以通过类似于 SQL 的 Spark SQL 来利用 Spark 引擎的强大功能来操作数据,并且 Spark SQL 涵盖了 HiveQL 的大部分功能。
使用 Hive 时,您必须实例化具有 Hive 支持的 SparkSession,包括与持久 Hive 元存储的连接、对 Hive serdes 的支持以及 Hive 用户定义的函数。
没有现有 Hive 部署的用户仍然可以启用 Hive 支持。 Spark 为您处理存储。
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
答案
- 我会说它们高度重叠。 Spark SQL 几乎是 HiveQL 的超集。
- Spar SQL 不是 HiveQL 的子集;关于后面的部分,是因为在SQL:2003标准中引入了regular expression like谓词。 Spark SQL 与 SQL:2003 兼容,HiveQL 仅实现了 SQL:2003 中引入的极少数功能,在少数功能中,
rlike 未包含在 HiveQL 中。
- 您必须查看 Spark 的 source code。实际上,在我看来,只需记住 Spark SQL 可以帮助您从各种数据源读取和写入数据,它涵盖了 HiveQL。 Spark SQL 具有 HiveQL 的大部分功能。
- 不完全是。 Spark SQL 是 Spark SQL。启用您提到的功能后,通常意味着您将与 Apache Hive 进行通信。即使您没有 Apache Hive 实体,启用该功能后,您也可以通过 Spark SQL 使用 HiveQL 的某些功能,因为 Spark SQL 支持 HiveQL 的大部分功能,并且 Spark 具有内部机制处理数据仓库的存储。
/* Example of Utilizing HiveQL via Spark SQL */
CREATE TABLE person (id INT, name STRING, age INT, class INT, address STRING);
INSERT INTO person VALUES
(100, 'John', 30, 1, 'Street 1'),
(200, 'Mary', NULL, 1, 'Street 2'),
(300, 'Mike', 80, 3, 'Street 3'),
(400, 'Dan', 50, 4, 'Street 4');
/* Utilize a feature from HiveQL */
SELECT * FROM person
LATERAL VIEW EXPLODE(ARRAY(30, 60)) tabelName AS c_age
LATERAL VIEW EXPLODE(ARRAY(40, 80)) AS d_age;
参考文献
- Damji, J.、Wenig, B.、Das, T. 和 Lee, D.,2020 年。学习 Spark:闪电般的数据分析。第 2 版。加利福尼亚州塞巴斯托波尔:O'Reilly,第 83-112 页。
- ISO/IEC JTC 1/SC 32 数据管理和交换,1992,信息技术 - 数据库语言 - SQL,ISO/IEC 9075:1992,美国
- ISO/IEC JTC 1/SC 32 数据管理和交换,2003,信息技术 - 数据库语言 - SQL - 第 2 部分:基础 (SQL/Foundation),ISO/IEC 9075-2: 2003 年,美国
- 怀特,T. (2015)。 Hadoop:权威指南。第 4 版。 Sebastopol,O'Reilly Media,第 471-518 页。
-
cwiki.apache.org。 2013. 语言手册横向视图。 [在线] 网址为:https://cwiki.apache.org/confluence/display/Hive/LanguageManual。
-
spark.apache.org。 2021. 蜂巢表。 [在线] 网址为:https://spark.apache.org/docs/latest/sql-data-sources-hive-tables.html。