您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > hadoophive手册
目录1Hive.........................................................................................................................................11.1什么是Hadoop,Hive..................................................................................................11.2Hive的设计目的.........................................................................................................21.3Hive简易架构............................................................................................................21.4Hive和传统Sql的概要比较.....................................................................................31.5Hive内连接................................................................................................................41.6Hive外连接................................................................................................................51.7Hive半连接................................................................................................................61.8Hive子查询................................................................................................................61.9Hive多表插入............................................................................................................61.10Hive排序和聚集......................................................................................................71.11Hive用户定义函数..................................................................................................71.12Hive(现有am_dealer说明).....................................................................................71.13Hive中orderby,sortby的区别..............................................................................91.14UDTF例子..............................................................................................................101.15Hive的数据导入....................................................................................................111.16Hive的数据导出....................................................................................................111.17Hive的mapreduce脚本.......................................................................................121Hive1.1什么是Hadoop,Hive什么是Hadoop:由Apache基金会所开发的分布式系统基础架构用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储什么是HDFS:HadoopDistributedFileSystem分布式的文件系统。什么是mapreduce:keyvalue键值对的映射Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将SQL转换为MapReduce程序。Hive并不完全支持sql-92标准,这是有原因的,作为一个年轻的项目,Hive并没有时间实现对sql-92的全部支持。作为一个开源项目,Hive的特性只是为了满足开发者的需要而加入的。Hive还有一些对sql-92所没有的扩展。这些扩展受到mysql语法的启发。可以勉强看做对Mysql的一种模仿。1.2Hive的设计目的Hive的设计目的:让精通sql技能(但java编程技能较弱的)的分析师能够在HDFS的大规模数据上进行查询。HiveQl是Hive的查询语言。它的设计受到mysql的很多影响,如果熟悉mysql,您会觉得Hive很亲切。为什么要使用Hive1操作接口采用类SQL语法,提供快速开发的能力2避免了去写MapReduce,减少开发人员的学习成本3扩展功能很方便1.3Hive简易架构SQLHive处理转换成mapreduceHDFSMAPREDUCE运行1.4Hive和传统Sql的概要比较特性SqlHQL参考更新Update,insert,deleteInsertoverwritetable(填充整个表或分区)Insertoverwritetabletargetselectcol1,col2fromsource事务支持不支持索引支持0.7版本后支持少量数据类型整数、浮点数、定点数、文本、二进制串等整数、浮点数、布尔型、字符串、数组、映射、结构等函数数百个内置函数几十个内置函数多表插入不支持支持选择Sql-92From子句只能有一个表或视图,支持偏序的sortby,可限制返回数量limit,不支持Having连接Sql-92中支持或变相支持from子句中列出连接表,在where子句中列出连接条件内连接、外连接、半连接、映射连接,和带提示的sql-92语法连接内容见1.5-1.7子查询在任何子句中支持只能在from子句中,不支持相关子查询内容见1.8视图可更新,可以是物化的,也可以是非物化的。只读,不支持物化视图扩展点用户定义函数,存储过程用户定义函数,MapReduce脚本Hive现在不支持HAVING子句。可以将HAVING子句转化为一个子查询,例如:SELECTcol1FROMt1GROUPBYcol1HAVINGSUM(col2)10可以用以下查询来表达:SELECTcol1FROM(SELECTcol1,SUM(col2)AScol2sumFROMt1GROUPBYcol1)t2WHEREt2.col2sum101.5Hive内连接内连接是一种简单的连接,输入表里的每次匹配都会在输出表里生成一行。Sales表列出了人名,及其所购商品的IDSelect*fromsalesJoe2Hank4Ali0Eve3Hank2Select*fromthings2tie4coat3Hat1scarf可以进行如下内连接:Selectsales.*,things.*Fromsalesjointhingson(sales.id=things.id)结果:Joe22tieHank44coatEve33hatHank22tie反例:有些数据库,例如mysql和oracle在where子句中指定连接条件相等,Hive语句不支持如下语法:Selectsales.*,things.*Fromsales,thingsWheresales.id=things.id1.6Hive外连接外连接可以让你找到连接中不能匹配的数据行左外连接Selectsales.*,thing.*fromsalesleftouterjointhingsOn(sales.id=things.id)结果:Ali0nullnullJoe22tieHank44coatEve33hatHank22tie右外连接Selectsales.*,thing.*fromsalesrightouterjointhingsOn(sales.id=things.id)Nullnull1scrafJoe22tieHank44coatEve33hatHank22tie1.7Hive半连接Hive并不支持in子查询,但可以使用leftsemijoin来达到相同的效果。例如以下状况Hive是不允许的:Select*fromthingswherethings.idin(selectidfromsales)需改写如下:Select*fromthingsleftsemijoinonsales(sales.id=things.id)1.8Hive子查询子查询是内嵌在另一个sql语句中的select语句,Hive对子查询的支持很有限。它只允许子查询出现在select语句之中的from子句之中。如:selecta1,a2,avg(max_c1)from(selecta1,a2,max(c1)asmax_c1fromrecordgroupbya1,a2)mtGroupbya1,a2子查询赋予别名mt,子查询的列必须有唯一的名称,以便外层查询可以引用这些列。1.9Hive多表插入在HiveQL中,可以把insert语句倒过来,把from子句放在最前面,查询效果是相同的:FromsourceInsertoverwritetabletargetSelectcol1,col2可以在一个查询中使用多个insert子句如下:Fromrecords2Insertoverwritetablestations_by_yearSelectyear,count(distictyear)GroupbyyearInsertoverwritetablerecords_by_yearSelectyear,count(1)Groupbyyear1.10Hive排序和聚集在Hive中可以使用标准的orderby子句对数据进行排序。Orderby能够预期产生全排序的结果,但是它只通过一个reducer来做到这一点,所以对于大规模的数据集,它的效率是非常低的。在很多情况下,并不需要结果是全局排序的,sortby为每个reducer产生一个排序文件。1.11Hive用户定义函数要写的函数有时无法使用Hive提供的内置函数来实现,通过编写用户定义函数(U
本文标题:hadoophive手册
链接地址:https://www.777doc.com/doc-2875671 .html