数据仓库工具HivePPT
简介Hive是Apache基金会下的一个开源项目,它是一个构建在Hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查...
简介Hive是Apache基金会下的一个开源项目,它是一个构建在Hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,底层会将SQL语句转化为MapReduce任务运行。其优点主要在于处理大规模数据时的稳定性和高效性。 Hive的核心组件2.1 MetastoreMetastore是Hive中的元数据存储组件,它存储了Hive中的表、索引、分区、列、数据类型以及其他物理数据的信息。Hive客户端可以通过Metastore获取需要的元数据信息。2.2 DriverDriver是Hive的查询引擎,它接受Hive的SQL查询语句,并将其转化为MapReduce任务,然后通过JobTracker或者YARN来执行这些任务。2.3 CompilerCompiler负责将Hive SQL查询语句编译成更高效的执行计划,这个执行计划就是一系列的MapReduce任务。2.4 ADMINISTRATION API这个API主要是用来创建、删除、修改和查询Hive中的数据库、表、索引等元数据信息。2.5 JDBC接口Hive提供了JDBC接口,因此我们可以通过JDBC驱动来对Hive进行SQL查询。 Hive的数据类型Hive支持的数据类型主要有以下几种:基本类型例如INT、STRING、FLOAT、DOUBLE等结构类型使用定义,可以包含不同类型的字段数组类型使用定义,包含一组相同类型的元素映射类型使用定义,包含一组键值对,键和值可以是任意类型联合类型使用定义,包含一组相同类型的字段,但只能有一个字段被选中用户自定义类型使用定义,可以定义自己的类型 Hive的表类型Hive支持的表类型主要有以下几种:Managed Table(内部表)由Hive管理元数据和存储,删除表时直接删除元数据和数据文件External Table(外部表)由用户提供数据文件和元数据信息,Hive只管理元数据,删除表时仅删除元数据。数据文件在删除后仍然会保留Partitioned Table(分区表)将表的数据按照某个或者多个列的值进行划分,不同的分区可以放在不同的目录下Clustered Table(聚集表)将表的多个副本聚集到不同的节点上,可以提高查询效率Indexed Table(索引表)为表的某个或者多个列创建索引,可以提高查询效率Bitmap Index(位图索引)一种针对大型稀疏数据的索引方法Bitmap Merge Index(位图合并索引)用于跨多个分区或表的位图索引Inverted Index(倒排索引)用于搜索引擎中的数据检索 Hive的查询语言HQLHive的查询语言HQL(Hive Query Language)类似于SQL,但是并不完全相同。Hive的HQL在语法上与SQL非常接近,同时对于一些特性的处理方式也与SQL有些不同。比如在SQL中常用的JOIN操作在Hive中并不支持,取而代之的是笛卡尔积操作符JOIN ... ON ...。再比如Hive不支持子查询等等。此外,Hive还提供了自己特有的操作符,例如GROUP BY ... SORT BY ...等。5.1 Hive和SQL的主要区别SQL在执行查询到结果的过程中会创建一份临时表来存储结果,而Hive则不会创建临时表,而是直接将结果输出到控制台或者文件中SQL支持原子的更新操作例如等操作都会对数据进行直接的修改。而Hive的所有更新操作都是以添加新数据的形式来完成的,旧的数据仍然会被保留SQL支持复杂的联合查询操作例如使用WITH子句进行多个表之间的关联查询等操作。而Hive则不支持这样的操作,它使用的是类似内外连接的方式来处理联合查询的SQL支持非常详细的索引和数据完整性保障机制而Hive则没有提供这些特性SQL对数据的处理是基于每一行进行的而Hive对数据的处理是基于MapReduce作业进行的。因此Hive的性能非常依赖于MapReduce作业的性能。此外,由于MapReduce作业对数据的全局读写操作比较频繁,因此相比之下Hive的性能会比其他一些基于行级别的数据处理系统要差一些5.2 Hive和SQL的相同之处Hive和SQL都是声明性语言用户只需要告诉