同关系型数据库一样,Hive中也支持视图(View)和分区(Partition),但与关系型数据库中的有所区别,本文简单介绍Hive中视图和分区的示例。
在真实业务场景下,视图的应用比较少,分区使用的非常多,因此建议对分区这块多花的时间来了解。
四、Hive的视图和分区
4.1 Hive中的视图
和关系型数据库一样,Hive中也提供了视图的功能,注意Hive中视图的特性,和关系型数据库中的稍有区别:
- 只有逻辑视图,没有物化视图;
- 视图只能查询,不能Load/Insert/Update/Delete数据;
- 视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的那些子查询;
4.1.1 创建视图
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name [COMMENT column_comment], …) ]
[COMMENT view_comment]
[TBLPROPERTIES (property_name = property_value, …)]
AS SELECT …;
例如:
CREATE VIEW IF NOT EXISTS v_lxw1234 (url COMMENT ‘url’)
COMMENT ‘view lxw1234′
AS SELECT url FROM lxw1234
WHERE url LIKE ‘http://%’
LIMIT 100;
4.1.2 删除视图
DROP VIEW IF EXISTS v_lxw1234;
4.1.3 修改视图
ALTER VIEW v_lxw1234 AS
SELECT url FROM lxw1234 limit 500;
更多关于Hive视图的介绍,请参考官方文档:
4.2 Hive中的表分区
Hive中的表分区比较简单,就是将同一组数据放到同一个HDFS目录下,当查询中过滤条件指定了某一个分区值时候,只将该分区对应的目录作为Input,从而减少MapReduce的输入数据,提高查询效率。
4.2.1 创建分区表
CREATE EXTERNAL TABLE t_lxw1234 (
id INT,
ip STRING COMMENT ‘访问者IP’,
avg_view_depth DECIMAL(5,1),
bounce_rate DECIMAL(6,5)
) COMMENT ‘lxw的大数据田地-lxw1234.com’
PARTITIONED BY (month STRING, day STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’
STORED AS textfile;
- 在创建表时候,使用PARTITIONED BY关键字来指定该表为分区表,后面括号中指定了分区的字段和类型,分区字段可以有多个,在HDFS中对应多级目录。
- 比如,上面的表t_lxw1234分区month=’2015-06’,day=’2015-06-15’对应HDFS上的路径为:/user /hive/warehouse/default.db/t_lxw1234/month=2015-06/day=2015-06-15/,当查询中指 定了month=’2015-06’ AND day=’2015-06-15’,MapReduce直接从该目录中读取数据,如果只指定了month=’2015-06’,那么MapReduce将 /month=2015-06/下所有的子目录都作为Input。
4.2.2 添加分区
- 使用INSERT添加分区:
往分区中追加数据:
INSERT INTO TABLE t_lxw1234 PARTITION (month = ‘2015-06′,day = ‘2015-06-15′)
SELECT * FROM dual;
覆盖分区数据:
INSERT overwrite TABLE t_lxw1234 PARTITION (month = ‘2015-06′,day = ‘2015-06-15′)
SELECT * FROM dual;
- 使用ALTER TABLE添加分区:
ALTER TABLE t_lxw1234 ADD PARTITION (month = ‘2015-06′,day = ‘2015-06-15′) location ‘hdfs://namenode/tmp/lxw1234/month=2015-06/day=2015-06-15/';
4.2.3 查看分区对应的HDFS路径
- 使用命令 show partitions t_lxw1234; 查看表的所有分区:
hive> show partitions t_lxw1234;
OK
month=2015-01/day=2015-01-25
month=2015-01/day=2015-01-31
month=2015-02/day=2015-02-15
month=2015-02/day=2015-02-28
month=2015-03/day=2015-03-15
month=2015-03/day=2015-03-31
- 使用desc formatted t_lxw1234 partition (month = ‘2015-01’ , day = ‘2015-01-25′);
查看该分区的详细信息,包括该分区在HDFS上的路径:
Location: hdfs://namenode/user/hive/warehouse/default.db/t_lxw1234/month=2015-01/day=2015-01-25/
4.2.4 删除分区
可以使用 ALTER TABLE t_lxw1234 DROP PARTITION (month = ‘2015-01’, day = ‘2015-01-25’);
删除一个分区;
同内部表和外部表,如果该分区表为外部表,则分区对应的HDFS目录数据不会被删除。
更多关于分区的介绍,可参考官方文档:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AddPartitions
相关推荐
对于复杂的查询,可以使用Hive的分桶、分区、物化视图等功能来优化性能。 总的来说,Apache Hive 2.1.0 是一个强大的大数据处理工具,适合于对海量数据进行离线分析和报表生成。它的出现极大地简化了大数据处理的...
5. **Hive Metastore**:存储关于Hive对象(如表、分区等)的元数据,方便查询和管理。 **Hive 2.3.0中的主要改进和特性:** 1. **Tez执行引擎**:除了传统的MapReduce,Hive 2.3.0支持更高效的Tez执行引擎,它...
5. **分区与桶**:为了提高查询效率,Hive 支持数据分区和桶的概念。分区将大表按特定列的值分成小块,桶则是按照哈希函数将数据分组,便于并行处理。 6. **视图与联合**:Hive 还支持创建视图,简化复杂查询,并...
为了优化性能,可以考虑使用分区、桶化、压缩等技术,以及调整Hive的执行计划和MapReduce的参数。 8. **维护与监控**:定期检查Hive的日志,使用工具如Ambari或Cloudera Manager监控Hive服务的运行状态,确保其健康...
2. **HiveQL**:Hive 的查询语言,类似于 SQL,允许用户定义数据结构、加载数据、执行查询和创建视图。HiveQL 解析器在源代码中实现,解析用户的查询并转换为适合 MapReduce 的任务。 3. **编译器**:将解析后的 ...
5. **Hcatalog**:提供元数据服务,允许其他工具(如 Pig、MapReduce)访问 Hive 的表和分区。 **Hive 的主要功能:** 1. **数据仓库**:支持创建、管理、查询和分析大规模数据集。 2. **数据ETL(抽取、转换、加载...
1. **元数据管理**:Hive的核心功能之一是元数据管理,它存储关于数据表结构和分区的信息。元数据存储在MySQL或Derby等关系型数据库中,使得Hive可以理解HDFS上的数据文件格式。 2. **HQL支持**:Hive提供了一种类...
其中,Hive Server负责接收客户端请求,Metastore存储表和分区的元数据,解析器将HQL转换为解析树,编译器再将其转化为MapReduce或Tez任务,优化器进行查询计划的优化,最后执行器负责调度和运行这些任务。...
对于开发人员和数据分析师,理解 Hive 的基本概念,如表、分区、桶、视图、函数和联合查询,是至关重要的。此外,熟悉 HQL 的语法,如 SELECT、FROM、WHERE、JOIN 和 GROUP BY 语句,能够帮助他们更有效地查询和分析...
Hive 教程--命令 Hive 是一种数据库技术,可以定义数据库和...这些知识点涵盖了 Hive 的基本操作,包括创建数据库、删除数据库、创建表、修改表、删除表、分区、内置运算符、内置函数、视图和索引、HiveQL Select 等。
- **Tez视图**:在Hadoop YARN上运行的Hive查询可以使用Tez视图来查看DAG(有向无环图)表示的执行计划。 - **Beeline或Hive CLI增强工具**:有些第三方工具可以增强Hive的命令行接口,添加执行计划的可视化功能。 ...
7. **Hive的性能优化**:Hive支持多种优化策略,如分区、桶、物化视图、Tez或Spark执行引擎的选择,以及使用Hive的EXPLAIN命令分析查询计划。 通过以上内容,我们可以了解到Apache Hive的核心功能和其与MySQL的集成...
五、Hive表和分区 创建表时,可以指定列数据类型、是否分区等。分区是将大表逻辑上划分为小块,每个分区对应一个目录,通常根据时间戳或地理位置等字段进行划分。查询时可以只扫描所需分区,减少不必要的I/O操作。 ...
Hive还提供了多种优化策略,如创建物化视图、使用外部表、调整执行计划和使用更高效的文件格式等,以提升大数据处理的效率。 总结来说,《Hive用户指南》是学习和理解Hive功能、特性和最佳实践的重要资源。通过...
4. 可以通过Hive的临时视图、分区、分桶等特性优化查询性能。 5. 结果可以输出到屏幕,也可以保存回HDFS或其他地方。 总的来说,Apache Hive-3.1.2作为一个强大的大数据处理工具,为数据分析师和数据科学家提供了...
6. **Hive性能优化**:Hive可以通过多种方式优化查询性能,比如使用分区过滤减少数据扫描量,使用物化视图预计算常用查询,或者通过设置合适的执行引擎(如Tez或Spark)来提高效率。 7. **Hive与HBase的对比**:...
此外,Cascading和Crunch等框架也常与Hive一起使用,它们提供了更高级别的抽象,简化了MapReduce编程。 在Hive的基础操作部分,书中涵盖了安装、配置和使用Hive的全过程,包括Java环境的设置、Hadoop的安装(涉及...
Hive是一种建立在Hadoop之上的数据仓库基础架构,用于存储、查询和分析存储在Hadoop文件系统(HDFS)中的大规模数据。Hive定义了一种类SQL查询语言(即Hive QL),让熟悉SQL的用户能够以简单的方式查询Hadoop中的数据...
Hive作为Hadoop生态系统中的重要组件,为企业提供了对大规模数据集的高效处理和分析能力。它允许用户通过类似于SQL的查询语言(HiveQL)来操作分布式存储的数据,简化了MapReduce编程模型。本规范旨在指导开发者遵循...
3. **数据分桶和分区**:为了提高查询性能,Hive支持数据分桶和分区。分桶是将数据集按照某个字段的值分成若干个桶,而分区是将大表按照一个或多个列的值划分成不同的子目录,便于查询优化。 4. **延迟物化视图...