Hive中视图机制的初步使用及分析

作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息

网址: http://www.cnblogs.com/panfeng412/archive/2013/04/29/hive-view-usage-and-analysis.html

本文是对Hive中逻辑视图的介绍,通过一个简单的视图例子,说明其使用方法及执行过程。

Hive 0.6版本及以上支持视图(View,详见Hive的RELEASE_NOTES.txt),Hive View具有以下特点:

1)View是逻辑视图,暂不支持物化视图(后续将在1.0.3版本以后支持);

2)View是只读的,不支持LOAD/INSERT/ALTER。需要改变View定义,可以是用Alter View;

3)View内可能包含ORDER BY/LIMIT语句,假如一个针对View的查询也包含这些语句, 则View中的语句优先级高;

4)支持迭代View。

CDH4中自带的Hive版本为0.10.0,支持的View是逻辑视图,因此本质上来说View只是为了使用上的方便,从执行效率上来说没有区别,甚至可能因为要多一次对MetaStore元数据的操作效率略有下降(这里只是一种理论上的推测,实际可能看不出太大区别)。

下面是简单的验证过程(感兴趣的可以看下,以下过程如有问题,可以一起交流):

1)创建一个测试表:

hive> create table test (id int, name string);
OK
Time taken: 0.19 seconds
hive> desc test;                                                                           
OK
id      int
name    string
Time taken: 0.16 seconds

2)创建一个View之前,使用explain命令查看创建View的命令是如何被Hive解释执行的:

hive> explain create view test_view (id, name_length) as  select id, length(name) from test;
OK
ABSTRACT SYNTAX TREE:(TOK_CREATEVIEW (TOK_TABNAME test_view) (TOK_TABCOLNAME (TOK_TABCOL id TOK_NULL) (TOK_TABCOL name_length TOK_NULL)) (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME test))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL id)) (TOK_SELEXPR (TOK_FUNCTION length (TOK_TABLE_OR_COL name)))))))
STAGE DEPENDENCIES:Stage-0 is a root stage
STAGE PLANS:Stage: Stage-0Create View Operator:Create Viewif not exists: falseor replace: falsecolumns: id int, name_length intexpanded text: SELECT `id` AS `id`, `_c1` AS `name_length` FROM (select `test`.`id`, length(`test`.`name`) from `default`.`test`) `test_view`name: test_vieworiginal text: select id, length(name) from test
Time taken: 0.088 seconds

可见,创建View的过程解释后并没有实际执行Map Reduce的Stage,只包含一个Create View Operator的Stage,这个阶段只是对MySQL MetaStore进行元数据操作,记录View的相关元数据而已。

3)接下来,实际创建这个View:

hive> create view test_view (id, name_length) as  select id, length(name) from test;   
OK
Time taken: 0.1 seconds

4)执行这个View之前,先explain查看实际被翻译后的执行过程:

hive> explain select name_length from test_view;
OK
ABSTRACT SYNTAX TREE:(TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME test_view))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL name_length)))))
STAGE DEPENDENCIES:Stage-1 is a root stageStage-0 is a root stage
STAGE PLANS:Stage: Stage-1Map ReduceAlias -> Map Operator Tree:test_view:test_view:testTableScanalias: testSelect Operatorexpressions:expr: length(name)type: intoutputColumnNames: _col1Select Operatorexpressions:expr: _col1type: intoutputColumnNames: _col1Select Operatorexpressions:expr: _col1type: intoutputColumnNames: _col0File Output Operatorcompressed: falseGlobalTableId: 0table:input format: org.apache.hadoop.mapred.TextInputFormatoutput format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormatStage: Stage-0Fetch Operatorlimit: -1
Time taken: 0.107 seconds

可以看出,对View进行的查找过程,实际还是对原始test表进行的查询操作(分为Stage-0和Stage-1两个阶段)。

5)最后,实际对这个View执行一次查询,显示Stage-1阶段对原始表test进行了MapReduce过程:

hive> select name_length from test_view;       
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201303092253_0057, Tracking URL = http://jobtracker.host:50030/jobdetails.jsp?jobid=job_201303092253_0057
Kill Command = /usr/lib/hadoop/bin/hadoop job  -kill job_201303092253_0057
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2013-03-13 22:43:39,044 Stage-1 map = 0%,  reduce = 0%
2013-03-13 22:43:42,074 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.73 sec
2013-03-13 22:43:43,086 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.73 sec
2013-03-13 22:43:44,098 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.73 sec
2013-03-13 22:43:45,113 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 0.73 sec
MapReduce Total cumulative CPU time: 730 msec
Ended Job = job_201303092253_0057
MapReduce Jobs Launched:
Job 0: Map: 1   Cumulative CPU: 0.73 sec   HDFS Read: 250 HDFS Write: 0 SUCCESS
Total MapReduce CPU Time Spent: 730 msec
OK
Time taken: 15.793 seconds

 

转载于:https://www.cnblogs.com/panfeng412/archive/2013/04/29/hive-view-usage-and-analysis.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

励志!送女儿去厦大读研后,爸爸回家就考了厦大的博士,现在是女儿的“学弟”...

全世界只有3.14 % 的人关注了爆炸吧知识2020上半年,在安徽阜阳家里,女儿王睿在房间内上着厦门大学在线专业课,父亲王健作为师范高校教师直播着自己的思政公共课和生命教育有关课程。然而一到周末,王健也和女儿一样,作为…

【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象

为何将单例模式移除 在Cocos2d-JS v3.0之前。全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环。可惜的是,这样的统一性也在非常大程度上限制了Cocos2d-html5的发展,有一些在C中非常有意义的涉及搬到Html5平台后…

mysql 中有什么命令_常用mysql命令大全

常用的MySQL命令大全连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码1、例1:连接到本机上的MYSQL。首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码&#xf…

Android之webview背景设置为透明无效

Adndroid 2.X的设置 webview是一个使用方便、功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色)。 此时就想到了要把webview的背景设置为透明,这样就可以与其背景融为一体…

linux系统的运行级别

linux 运行级别 0 停机1 单用户模式,用来维护系统。2.多用户不能使用NFS模式。3 多用户模式,也是主要的使用模式4 未定义5 窗口使用模式6 重新启动模式用init(0 1 2 3 4 5 6)切换运行级别,(init 3 切换到多用户模式)转…

C# WPF MVVM模式Prism框架从零搭建(经典)

01—前言目前最新的PRISM的版本是8.1.97,本节以6.3.0.0 讲解,可以在Github上获取PRISM的源码。Prism Github地址:https://github.com/PrismLibrary/PrismPrism官方文档:https://prismlibrary.com/docs/Prism要用到IOC容器&#xf…

在中国,有这样一些村落

全世界只有3.14 % 的人关注了爆炸吧知识01地坑村在河南有一个全球最神奇的村落这村子神奇就神奇在当你走进村子能听到家家户户的吵闹声却见不到一座房子原来村落居然建在地底下基本不用与外界接触但村子却被外国媒体争相报道火的一塌糊涂更不可思议的是村里的老人平均寿命都超1…

2-2

为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息…

.NET 6新特性试用 | 隐式using指令

前言在使用《最小Web API》时,我们发现,相比以前的代码,大量的using指令消失了:using指令的主要作用是允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间。那么,在.NET 6下为什么不需要了…

mysql 导入文件夹_MySQL-导入与导出

CSV文件导入MySQLLOAD DATA INFILE语句允许您从文本文件读取数据,并将文件的数据快速导入数据库的表中。导入文件操作之前,需要准备以下内容:一、将要导入文件的数据对应的数据库表。二、准备好一个CSV文件,其数据与表的列数和每列…

Android之ButterKnife--View注入框架

俗话说:“不会偷懒的程序员不是好的程序员!”。作为一名Android开发,是不是经常厌烦了大量的findViewById以及setOnClickListener代码,而ButterKnife是一个专注于Android系统的View注入框架,让你从此从这些烦人臃肿的代码中解脱出来。先来看一段代码示例说明下ButterKnife…

设计模式 - Mediator

意图:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 一般来说,只有对于那种同事类之间是网状结构的关系,才会考虑使用中介者模式。…

6部有生之年必看的BBC “教材级” 地理纪录片,免费领取!

看BBC的纪录片,既可以追溯上下数千年的历史文化,也可以欣赏从宇宙到地心深处的奇妙境界,而及其超级精彩的画面即使定格,也是一幅摄影佳作。BBC纪录片题材广泛、制作精良,观看起来算的上是赏心悦目。对于学习英文&#…

Android之开发中用到的几个多线程解析

在开发工程中线程可以帮助我们提高运行速度,Android开发中我知道的线程有四个一个是老生长谈的Thread,第二个是asyncTask,第三个:TimetTask,第四个是Looper,四个多线程各有个的有点,Thread的运行速度是最快的,AsyncTask的规范性是最棒的,其它两个也有自己的优点,下面先贴…

blazor wasm开发chrome插件

用blazor(Wasm)开发了一个chrome插件感觉效率挺高的,分享给大家先简单介绍下WebAssembly的原理:“WebAssembly是一种用于基于堆栈的虚拟机的二进制指令格式”image如上图,浏览器在执行js时是会经历 Parser转成语法树->Compiler转成字节码-…

求偶的两种方法

import java.util.Scanner;public class Testif {public static void main(String[] args) {// TODO 自动生成的方法存根Scanner scan new Scanner(System.in);System.out.println("请输入一个整数:");long number scan.nextLong(36);String check (numbe…

idea zookeeper的使用_学习ZooKeeper源码,就从这篇开始吧

【ZooKeeper系列】1.ZooKeeper单机版、伪集群和集群环境搭建【ZooKeeper系列】2.用Java实现ZooKeeper API的调用在系列的前两篇文章中,介绍了ZooKeeper环境的搭建(包括单机版、伪集群和集群),对创建、删除、修改节点等场景用命令行的方式进行了测试&…

base target=_self是什么意思

<base target_blank>//在空白页打开 <base target_parent>//在当前页的上一页(父亲)打开 <base target_search>//在浏览器地址栏打开 <base target_self>//在当前页打开 <base target_top>//在最初(祖先)页打开 base 是地址 tar…

都才40出头,近一个月已有至少5名优秀青年学者英年早逝!健康不容忽视

全世界只有3.14 % 的人关注了爆炸吧知识近年来&#xff0c;在工作、生活的层层重压下&#xff0c;正处于事业上升期的科研人员因病逝世的消息屡屡传出。据不完全统计&#xff0c;仅仅今年10月份至今&#xff0c;短短一个多月时间里&#xff0c;已有至少5位优秀青年学者倒下。他…

基于 Spring Security 的开源统一角色访问控制系统 URACS

URACS Java语言开发的统一角色访问控制系统(Unified Role Access Control System)&#xff0c;基于Spring Security 3实现的权限控制系统 程序框架版本说明&#xff1a;Spring MVC 3.0.6 Spring Security 3.1.3 Hibernate 3.6.10 运行演示例子&#xff1a; 例子使用的是MySQL…