学习笔记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、查询数据
学习笔记Hive(八)—— 查询优化相关推荐
- Kotlin 学习笔记(八)—— Kotlin类与对象之接口
Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...
- Windows进程与线程学习笔记(八)—— 线程切换与TSS/FS
Windows进程与线程学习笔记(八)-- 线程切换与TSS/FS 要点回顾 线程切换与TSS 内核堆栈 调用API进0环 实验:分析SwapContext 线程切换与FS 段描述符结构 分析Swap ...
- Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
Windows保护模式学习笔记(八)-- 页目录表基址/页表基址 要点回顾 一.页目录表基址 实验:拆分线性地址C0300000,并查看其对应的物理页 第一步:打开一个进程,获得它的Cr3 第二步:查 ...
- OpenCV学习笔记(八):形态学morpholgy(2):开/闭运算,形态学梯度、顶帽/黑帽morphologyEx()
OpenCV学习笔记(八):形态学morpholgy(2):开.闭运算,形态学梯度.顶帽.黑帽:morphologyEx() 数学形态学(Mathematical morphology) 是一门建立在 ...
- QT学习笔记(八):顺序容器和关联容器
QT学习笔记(八):顺序容器和关联容器 一.前言 二.容器介绍 2.1 顺序容器 2.2 关联容器 二.顺序容器示例 三.关联容器 一.前言 在Qt库中为我们提供了一系列的基于模板的容器类(conta ...
- ROS学习笔记(八): ROS通信架构
ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...
- MATLAB学习笔记(八)
MATLAB学习笔记(八) 一.二维曲线 1.1 plot函数 1.2 fplot函数 二.绘制图形的辅助操作 2.1 图形标注 2.2 坐标控制 2.3 图形保持 2.4 图形窗口分割 三.其他形式 ...
- LabView学习笔记(八):属性节点
Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...
- Unity-URP学习笔记(八)使用RendererFeature制作屏幕后期-高斯模糊
Unity-URP学习笔记(八)使用RendererFeature制作屏幕后期-高斯模糊 URP使用RendererFeature制作高斯模糊 结果展示 Shader展示 GaussianBlurRe ...
- RxJava 学习笔记(八) --- Combining 结合操作
@(Rxjava学习笔记) RxJava 学习笔记(八) - Combining 结合操作 RxJava 学习笔记八 Combining 结合操作 StartWith 在数据序列的开头插入一条指定的项 ...
最新文章
- vivo 亿级优惠券系统架构设计与实践
- 两台虚拟机的Putty端实现互相免密码登录
- vs2012html图片,简单几步 实现vs2010对html5的支持
- 多类目MoE模型在京东电商搜索中的应用
- extends 和super 泛型限定符-上界不存下界不取
- 显卡能力在cod7上的排名
- Win10下连接树莓派ZeroW(附win10虚拟网卡驱动下载)
- 1296. 聪明的燕姿
- I/Q数据频谱分析仪简介
- 精华QT安装:qt-opensource-windows-x86-5.14.1
- 电脑录屏软件哪个好用,分享4款不限时长的录屏软件
- Altium Designer导出Gerber文件的一般步骤
- HTML链接CSS的三种方法
- 坐拥400W用户的免费软件一夜关停,360、钉钉、WPS等未来几何?
- python运维工具开源_开源运维自动化平台-opendevops
- BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸
- 《搞定Excel数据透视表》
- 谷歌浏览器,安卓内嵌谷歌内核webview使用高德JSAPI定位失败的问题解决!
- 应广单片机红外发射例程
- 小米架构调整成立手机产品部,Meta设立全新职位CISO,特斯拉中国仍在招人,今日更多大新闻在此...
热门文章
- pyspark 读取本txt 构建RDD
- 用scikit-learn学习K-Means聚类
- gtk移植到嵌入式_物联网时代的盛行,应届毕业生是学嵌入式好呢,还是安卓或ios呢?...
- 83. Leetcode 148. 排序链表 (排序)
- 54. Leetcode 113. 路径总和 II (二叉树-二叉树路径和)
- Tensorflow实现MNIST数据自编码(1)
- torch_geometric 笔记:TORCH_GEOMETRIC.UTILS(更新中)
- R语言实战应用精讲50篇(二十七)-R语言实现随机森林(附R语言代码)
- 【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)
- HJ10 字符个数统计