在大数据技术栈中工作超过五年,注意到Hive作为商业领域的数据仓库解决方案被频繁使用。学习Apache Hadoop时,不能忽视Apache Hive。Hive是Hadoop生态系统的一部分,它允许为存储在HDFS中的大量数据提供模式。大多数人对RDBMS及其表都很熟悉,它们已经成为生活的一部分。这里要说的——Hive中的表与此并无不同。
Apache Hive是什么?
Apache Hive是一个为Apache Hadoop提供的数据仓库系统。它为HDFS中的数据提供类似SQL的访问方式,使Hadoop可以用作仓库结构。Hive允许在大量非结构化数据上提供结构。定义结构后,可以使用Hive查询数据,而无需了解Java或MapReduce。Hive查询语言(HQL)具有与关系数据库中标准SQL相似的语义和功能,使经验丰富的数据库分析师能够轻松访问数据。
Hive提供的功能
Apache Hive提供了以下功能:
- Hive提供了一个比MapReduce更简单的查询模型,编码量更少。
- HQL和SQL具有相似的语法。
- 它提供了许多函数,使得分析使用更加容易。
- 与其他类型的查询相比,响应时间通常要快得多。
- Hive支持在不同的计算框架上运行。
- 它支持对HDFS上的数据进行即席查询。
- Hive支持用户定义的函数、脚本和自定义的输入/输出格式,以扩展其功能。
- 可扩展到各种类型的数据和更大的数据集。
- 成熟的JDBC和ODBC驱动程序允许许多应用程序拉取Hive数据进行无缝报告。
- Hive允许用户使用SerDes和输入/输出格式以任意格式读取数据。
- Hive具有明确的元数据管理、认证和查询优化架构。
- 有一个庞大的实践者和开发者社区正在使用和开发Hive。
Apache Hive中的表类型
以下是Apache Hive中的表类型:
在管理表中,表数据和表模式都由Hive管理。数据将位于以表命名的文件夹中,该文件夹位于Hive数据仓库内,本质上是HDFS中的一个文件位置。位置可以在Hive安装时由用户配置。所谓管理或控制,意味着如果删除(删除)一个管理表,那么Hive将删除与表相关的模式(表的描述)和数据文件。默认位置是/user/hive/warehouse)。
CREATE TABLE IF NOT EXISTS stocks (exchange STRING, symbol STRING, price_open FLOAT, price_high FLOAT, price_low FLOAT, price_adj_close FLOAT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
对于管理表,还可以复制现有表的模式(但不是数据):
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.employees3 LIKE mydb.employees LOCATION '/path/to/data';
外部表是指只有表模式由Hive控制。在大多数情况下,用户将在HDFS中设置文件夹位置并将数据文件复制到那里。这个位置是表定义语句的一部分。当删除外部表时,Hive只会删除与表相关的模式。数据文件不受影响。
CREATE EXTERNAL TABLE IF NOT EXISTS stocks (exchange STRING, symbol STRING, price_open FLOAT, price_high FLOAT, price_low FLOAT, price_adj_close FLOAT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/data/stocks';
管理表与外部表的区别
管理表和外部表的主要区别在于:
- Hive假定它拥有管理表的数据。
- 对于外部表,Hive假定它不管理数据。
- 如果删除管理表或分区,与该表或分区相关的数据和元数据将被删除。
- 删除表不会删除数据,尽管表的元数据将被删除。
- 对于管理表,Hive将数据存储在其仓库目录中。
- 对于外部表,Hive将数据存储在创建表时指定的位置(通常不在仓库目录中)。
- 管理表提供ACID/事务支持。
- 外部表不提供ACID/事务支持。
- 支持ARCHIVE、UNARCHIVE、TRUNCATE、MERGE、CONCATENATE等语句。
- 不支持。
- 支持查询结果缓存(保存执行的Hive查询结果以供重用)。
- 不支持。
可以使用DESCRIBE EXTENDED table name的输出来判断表是管理表还是外部表。在详细表信息输出的末尾,将看到管理表的以下内容:
... tableType: MANAGED_TABLE
对于外部表,将看到以下内容:
... tableType: EXTERNAL_TABLE
- 数据湖和数据仓库之间的区别是什么?
- SQL与NoSQL数据库——每个数据工程师都应该了解的关键概念
- 每个数据科学专业人士都应该了解的5个流行的NoSQL数据库
- 数据工程的CAP定理初学者指南