栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

学习笔记Hive(八)—— 查询优化

学习笔记Hive(八)—— 查询优化

一、视图 1.1、Hive的视图
  • 视图是基于数据库的基本表进行创建的一种伪表,数据库中储存视图的定义,不存数据项,数据项仍然存在基本表中它可作为一个抽象层,将数据发布给下游用户。
  • 目前 Hive 版本支持逻辑视图,不支持物理视图。所以 Hive 的数据仓库目录查找不到视图,但可在 Mysql 的元数据库中查找到。
  • 视图只能查询,不能进行数据的插入和修改,可以提高数据的安全性。
  • 在创建视图时候视图就已经固定,对基表的后续更改(如添加列)将不会反映在视图。
  • view定义中若包含了ORDER BY/LIMIT语句,则当查询视图时也进行ORDER BY/LIMIT语句操作,view当中定义的优先级更高。

1.2、引用视图的优点
  • 使用视图降低查询复杂度
  • 使用视图来限制基于条件过滤的数据
1.3、视图创建和应用 1.3.1、了解顾客需求 1.3.2、创建视图
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name   -- 视图名称  
[(column_name [COMMENT column_comment], ...) ]    --列名 
 [COMMENT view_comment]  --视图注释  
[TBLPROPERTIES (property_name = property_value, ...)]  --额外信息  
AS SELECt ...;
1.3.3、查看与删除视图

1、查看某个视图

desc view_name;

2、查看某个视图详细信息

desc formatted view_name;

3、删除视图

DROP VIEW [IF EXISTS] [db_name.]view_name;

任务1

将以下嵌套查询中的嵌套子查询变成视图

select t.types,t.goods,t.t_g_count from (select c.types,c.goods,count(1) t_g_count,row_number() over(partition by c.types order by count(1) desc) rank from(select a.*,b.types from goodsorder a left outer join goodstypes b on a.goods=b.goods) c group by c.types,c.goods) t where rank<=10




结果(部分):


二、索引 2.1、Hive的索引
  • Hive没有主键概念,但可以建立索引,索引的设计目标是提高表某些列的查询速度。
  • 在指定列上建立索引,会产生一张索引表,里面的字段包括:索引列的值、该值对应的HDFS文件路径、该值在文件中的偏移量。
  • 在查询涉及到索引字段时,首先到索引表查找索引列值对应的HDFS文件路径及偏移量,这样就避免了全表扫描。

索引表:


2.2、索引的优点
  • 可以避免全表扫描和资源浪费
  • 可以加快含有group by的语句的查询速度

2.3、索引创建和应用 2.3.1、创建索引
CREATE INDEX index_name     --索引名称  
ON TABLE base_table_name (col_name, ...)  --建立索引的列  
AS index_type    --索引类型  
[WITH DEFERRED REBUILD]    --重建索引 
 [IDXPROPERTIES (property_name=property_value, ...)]  --索引额外属性 
 [IN TABLE index_table_name]    --索引表的名字 
 [     [ ROW FORMAT ...] STORED AS ...      
 | STORED BY ...  ]   --索引表行分隔符 、 存储格式 
 [LOCATION hdfs_path]  --索引表存储位置 
 [TBLPROPERTIES (...)]   --索引表表属性  
[COMMENT "index comment"];  --索引注释

2.3.2、自动使用索引

(创建索引之前设置)

SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.optimize.index.filter=true;
SET hive.optimize.index.filter.compact.minsize=0;

2.3.3、查看和删除索引

1、显示表上所有列的索引

SHOW FORMATTED INDEX ON table_name;

2、删除索引

DROP INDEX [IF EXISTS] index_name ON table_name;

任务2

1、为goodsorders id字段创建索引

2、查询id=10的顾客的订单

3、按照id分组统计每个顾客购买商品数量


三、存储格式 3.1、文件存储格式
  • 指Hive表数据存储的格式
  • 默认是文本文件格式
  • 有行存储和列存储

3.2、存储格式设置
STORED AS (TextFile|RCFile|SequenceFile|ORC|Parquet)
存储格式存储方式压缩方式特点
textFile按行存储Gzip,Bzip2存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
SequenceFile按行存储NONE,RECORD,BLOCK。Record压缩率低,一般建议使用BLOCK压缩存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载
RCFile按列存储存储空间小,查询的效率高 ,需要通过text文件转化来加载,加载的速度低。压缩快 快速列存取。读取全量数据的操作 性能可能比sequencefile没有明显的优势
ORCFile按列存储zlib(default),snappy压缩快,快速列存取 ,效率比rcfile高,是rcfile的改良版本,不支持其他的查询引擎, 比如impala
parquet按列存储Parquet压缩比较低,查询效率较低,不支持update、insert和ACID.但是Parquet支持Impala查询引擎

默认是TextFile存储格式

Impala是CloudParquet和ORC有很多相似之处, 但是Parquet更有意成为hadoop上通用的存储格式. 它可以与impala, Spark, Pig等引擎结合使用. 它可以指定每一列的压缩方式, 从而实现更高效的压缩. Parquet旨在设计为支持复杂嵌套数据的存储, 比如json


任务3

数据(person.parquet):

1,Tom,23
2,Kate,24
3,Betty,22
4,Ketty,23
5,Jhon,21

1、创建表person,设置表的数据存储格式为parquet

2、将user.parquet文件存入表中

3、查询数据

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300165.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号