一、视图

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(八)—— 查询优化相关推荐

  1. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  2. Windows进程与线程学习笔记(八)—— 线程切换与TSS/FS

    Windows进程与线程学习笔记(八)-- 线程切换与TSS/FS 要点回顾 线程切换与TSS 内核堆栈 调用API进0环 实验:分析SwapContext 线程切换与FS 段描述符结构 分析Swap ...

  3. Windows保护模式学习笔记(八)—— 页目录表基址/页表基址

    Windows保护模式学习笔记(八)-- 页目录表基址/页表基址 要点回顾 一.页目录表基址 实验:拆分线性地址C0300000,并查看其对应的物理页 第一步:打开一个进程,获得它的Cr3 第二步:查 ...

  4. OpenCV学习笔记(八):形态学morpholgy(2):开/闭运算,形态学梯度、顶帽/黑帽morphologyEx()

    OpenCV学习笔记(八):形态学morpholgy(2):开.闭运算,形态学梯度.顶帽.黑帽:morphologyEx() 数学形态学(Mathematical morphology) 是一门建立在 ...

  5. QT学习笔记(八):顺序容器和关联容器

    QT学习笔记(八):顺序容器和关联容器 一.前言 二.容器介绍 2.1 顺序容器 2.2 关联容器 二.顺序容器示例 三.关联容器 一.前言 在Qt库中为我们提供了一系列的基于模板的容器类(conta ...

  6. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

  7. MATLAB学习笔记(八)

    MATLAB学习笔记(八) 一.二维曲线 1.1 plot函数 1.2 fplot函数 二.绘制图形的辅助操作 2.1 图形标注 2.2 坐标控制 2.3 图形保持 2.4 图形窗口分割 三.其他形式 ...

  8. LabView学习笔记(八):属性节点

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  9. Unity-URP学习笔记(八)使用RendererFeature制作屏幕后期-高斯模糊

    Unity-URP学习笔记(八)使用RendererFeature制作屏幕后期-高斯模糊 URP使用RendererFeature制作高斯模糊 结果展示 Shader展示 GaussianBlurRe ...

  10. RxJava 学习笔记(八) --- Combining 结合操作

    @(Rxjava学习笔记) RxJava 学习笔记(八) - Combining 结合操作 RxJava 学习笔记八 Combining 结合操作 StartWith 在数据序列的开头插入一条指定的项 ...

最新文章

  1. vivo 亿级优惠券系统架构设计与实践
  2. 两台虚拟机的Putty端实现互相免密码登录
  3. vs2012html图片,简单几步 实现vs2010对html5的支持
  4. 多类目MoE模型在京东电商搜索中的应用
  5. extends 和super 泛型限定符-上界不存下界不取
  6. 显卡能力在cod7上的排名
  7. Win10下连接树莓派ZeroW(附win10虚拟网卡驱动下载)
  8. 1296. 聪明的燕姿
  9. I/Q数据频谱分析仪简介
  10. 精华QT安装:qt-opensource-windows-x86-5.14.1
  11. 电脑录屏软件哪个好用,分享4款不限时长的录屏软件
  12. Altium Designer导出Gerber文件的一般步骤
  13. HTML链接CSS的三种方法
  14. 坐拥400W用户的免费软件一夜关停,360、钉钉、WPS等未来几何?
  15. python运维工具开源_开源运维自动化平台-opendevops
  16. BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸
  17. 《搞定Excel数据透视表》
  18. 谷歌浏览器,安卓内嵌谷歌内核webview使用高德JSAPI定位失败的问题解决!
  19. 应广单片机红外发射例程
  20. 小米架构调整成立手机产品部,Meta设立全新职位CISO,特斯拉中国仍在招人,今日更多大新闻在此...

热门文章

  1. pyspark 读取本txt 构建RDD
  2. 用scikit-learn学习K-Means聚类
  3. gtk移植到嵌入式_物联网时代的盛行,应届毕业生是学嵌入式好呢,还是安卓或ios呢?...
  4. 83. Leetcode 148. 排序链表 (排序)
  5. 54. Leetcode 113. 路径总和 II (二叉树-二叉树路径和)
  6. Tensorflow实现MNIST数据自编码(1)
  7. torch_geometric 笔记:TORCH_GEOMETRIC.UTILS(更新中)
  8. R语言实战应用精讲50篇(二十七)-R语言实现随机森林(附R语言代码)
  9. 【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)
  10. HJ10 字符个数统计