资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2019/10/5,#,1,Hive,内部培训,顺丰科技,-,系统与数据集成研发中心,-,数据集成研发部,Hive 内部培训顺丰科技-系统与数据集成研发中心-数据集成,第一章,第二章,第三章,第四章,Hive,是什么,Hive,特性,怎么用,Hive,Hive,的调优及发展,第一章第二章第三章第四章Hive 是什么Hive 特性 怎么,2,Hive,是什么,?,Hive,是基于,Hadoop,的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类,SQL,查询功能。,本质是将,HQL,转换为,MapReduce,程序,Hive,关注以下几点:,在Hadoop中的数据可扩展的SQL处理,可扩展到100PB+,结构化和非结构化,数据,-,现阶段公司只是用到结构化的数据,Hive 是什么?Hive是基于Hadoop的一个数据仓库,3,Hive,的架构简介,在,Hadoop,生态圈的位置,建立在,Hive,之上的交换层,让传统,DBA,或者,Java,工程师轻松就能完成更多的工作,最终转化成,MapReduce Job,Hive,将元数据存储在数据库中,如,mysql,、,derby,。,Hive,中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。,解释器、编译器、优化器完成,HQL,查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在,HDFS,中,并在随后有,MapReduce,调用执行。,Hive,的数据存储在,HDFS,中,大部分的查询由,MapReduce,完成(包含*的查询,比如,select*from tbl,不会生成,MapRedcue,任务)。,Hive的架构简介 在Hadoop生态圈的位置建立在Hi,4,Hive,的架构简介,接口,1,、,Hive,将元数据存储在数据库中,如,mysql,、,derby,。,Hive,中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。,2,、,解释器,、编译器、优化器完成,HQL,查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在,HDFS,中,并在随后有,MapReduce,调用执行。,3,、,Hive,的数据存储在,HDFS,中,大部分的查询由,MapReduce,完成(包含,*,的查询,比如,select*from tbl,不会生成,MapRedcue,任务)。,Hive的架构简介 接口1、Hive 将元数据存储在数,5,H,ive,和普通关系数据库的异同,Hive,RDBMS,查询语言,HQL,SQL,数据存储,HDFS,Raw Device or Local FS,索引,无,有,执行,MapReduce,Excutor,执行延迟,高,低,处理数据规模,大,小,1,、,查询语言。专门设计,了类,SQL,的查询语言,HQL,。熟悉,SQL,开发的开发者可以很方便的使用,Hive,进行开发。,2,、,数据,存储位置,。,Hive,的数据都是存储在,HDFS,中的,。,3,、,数据格式,。,Hive,中没有定义专门的数据格式,数据格式可以由用户,指定,.,4,、,数据,更新,。,Hive,中不支持对数据的,改写,即没有更新,5,、,执行,。,Hive,中大多数查询的执行是通过,MapReduce,来实现,的。,6,、,执行,延迟,。,hive,延迟较高。,但由于,MR,框架 大数据量的访问优势明显,。,7,、,可,扩展性。由于,Hive,是建立在,Hadoop,之上的,因此,Hive,的可扩展性是和,Hadoop,的可扩展性是一致的,(,Oracle,在理论上的扩展能力也只有,100,台左右。,8,、,数据,规模。由于,Hive,建立在集群上并可以利用,MapReduce,进行并行计算,因此可以支持很大规模的,数据,Hive 和普通关系数据库的异同 Hive RDBMS 查,6,第一章,第二章,第三章,第四章,Hive,是什么,Hive,基本操作,怎么用,Hive,Hive,的调优及发展,第一章第二章第三章第四章Hive 是什么Hive 基本操作,7,Hive,基本操作,DDL,Create/Drop/Alter Database,Create/Drop/Alter,Table,Alter,Table/Partition/Column,Create/Drop/Alter,View,Create/Drop,Index,Create/Drop,Function,Show,Describe,Hive基本操作 DDLCreate/Drop/Alte,8,Hive,基本操作,托管表和外部表,Hive,默认,创建,Managed Table,,由,Hive,来管理数据,意味着,Hive,会将数据移动到数据仓库目录。,另外一种选择是创建,External Table,,这时,Hive,会到仓库目录以外的位置访问数据。,如何选择?,如果所有处理都由,Hive,完成,应该使用,Managed Table,。,如果要用,Hive,和其它工具来处理同一个数据集,应该使用,External Tables,。,托管表,外部表,CREATE/LOAD,把数据已到仓库目录,创建表时指明外部数据的位置,DROP,元数据和数据会被一起删除,只删除元数据,Hive基本操作 托管表和外部表Hive 默认创建Man,9,Hive,基本操作,DATABASE,在,Hive,中创建数据库及托管表,(,内部表,),1,、登录进入,Hive,sudo,-u hdfs hive,;,2,、查看数据库,show,databases,;,3,、创建数据库,create,database if not exists,abc_test;,4,、进入,abc_test,数据库,use,abc_test,;,5,、查看,数据库下所有的,表,show tables,;,6,、,创建托管表,(,内部,表:删除表,数据同时被删除,),drop table if exists,abc_table_01;,create,table abc_table_01(,id int,comment,序列,name,string comment,名称,),comment ,创建托管表,(,内部表,),row,format delimited fields terminated by 001,;,7,、查看,表结构,desc formatted abc_table_01,;,Hive基本操作 DATABASE在Hive中创建数据库,10,Hive,基本操作,Partition,Hive,外部表与分区表建立。,1,、创立,外部表,(,删除外部表,数据不会被删除,),drop,table if exists abc_table_02;,create,external,table abc_table_02,(,id,int comment,序列,name,string comment,名称,),comment,创建外部表,row,format delimited fields terminated by 001,location/test/fin_abc/fin_abc/fct/abc_table_02,;,2,、创建立分区,表,drop table if exists abc_table_03;,create,external,table abc_table_03,(,id,int comment,序列,name,string comment,名称,),comment,创建外部表,partitioned,by(hq_month_code string),row,format delimited fields terminated by 001,location,/test/fin_abc/fin_abc/bsl/abc_table_03,;,3,、添加,分区,alter table abc_table_03 add partition(hq_month_code=201501)location/test/fin_abc/fin_abc/bsl/abc_table_03/201501,;,Hive基本操作 Partition Hive外部表与分,11,Hive,基本操作,TABLE,OPERATING,Hive,数据库和表的,DDL,操作,1,、修改表名,alter table abc_table_01 rename to abc_table_01_new,;,2,、添加字段,(,不能删除字段,),alter,table abc_table_01_new add columns(abc string);,3,、,修改,字段,alter,table abc_table_01_new change abc new_abc string;,4,、删除分区,alter,table abc_table_03 drop partition(hq_month_code=201501,);,5,、查看分区,show,partitions abc_table_03;,6,、删除表,drop table,abc_table_01_new,;,7,、删除数据库,drop,database if exists abc_test cascade;,Hive基本操作 TABLE OPERATINGHiv,12,Hive,基本操作,TABLE,OPERATING,Hive,表的,DML,操作,1,、插入,数据,insert overwrite table abc_table_01 select count(*)as id,test1 from abc_table_01;,insert into table abc_table_01 select 1 as id,test12 from abc_table_01,;,2,、查询数据,select a.*from abc_table_01 a;,select,a.*from abc_table_01 a limit 10,;,注意:,1,、,Hive,支持并行插入。,2,、,Hive,不支持不等值连接。,3,、,Hive,中没有控制语句如,for,、,if else,、,while,等。,Hive基本操作 TABLE OPERATINGHiv,13,Hive,基本操作,DML,Loading files into,tables,Inserting data into Hive Tables from,queries,Writing data into the filesystem from,queries,Note,:,Multiple Insert,Hive基本操作 DMLLoading files in,14,Hive,基本操作,Queries,WHERE,Clause,ALL and DISTINCT Clauses,Partition Based Queries,HAVING Clause,LIMIT Clause,REGEX Column,Specification,https:/,cwiki.apache.org/confluence/display/Hive/LanguageManual+Select,Hive基本操作 QueriesWHERE Clause,15,Hive,基本操作,Queries Join,Inner join,Hive,只,支持等值连接;,JOIN,子句中表的顺序很重要,一般最好将最大的表在最后,;,Outer join,外连接可以让你找到连接表中不能匹配的数据行,;,Semi join,目前并不支持,IN,子查询,可以使用,LEFT SEMI JOIN,达到
展开阅读全文