首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

hive基础指南

关于Hive

Hive作为数据仓库,起源于Facebook,工作原理大致可以解释为:对用户输入的hql进行解释,编译,优化并生成查询计划,并转化为MapReduce任务进而执行:解释器——编译器——优化器——执行器;

Hive的元数据一般存储在关系型数据库中,如MySql;

底层存储用到的是HDFS分布式存储系统;

优点:1.简单易上手:提供了类SQL查询语言HQL;2.可扩展:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统);3. 提供统一的元数据管理;4. Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数:继承hive的UDF类,重写evaluate方法;5. 容错:良好的容错性,节点出现问题SQL仍可完成执行;

缺点:1. hive的HQL表达能力有限;2. 效率比较低,自动生成的mapreduce作业,通常情况下不够智能化,且调优比较困难;

Hive与传统数据库的异同

Hive数据类型

Hive用户接口

1)Hive CLI(Hive CommandLine,Hive命令行),客户端可以直接在命令行模式下进行操作

2)hwi(Hive WebInterface,Hive Web接口),Hive提供了更直观的Web界面

3)hiveserver,Hive提供了Thrift服务,Thrift客户端目前支持C++/Java/PHP/Python/Ruby

Hive常用文件格式

Textfile:默认格式,数据不做压缩,磁盘开销大,数据解析开销大;

SEQUENCEFILE:SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点;

rcfile:RCFILE是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取;

parquet:Apache Parquet是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop生态圈中大多数计算框架;

Hive数据导入导出

从本地数据导入:load data local inpath '/home/hadoop/test.txt' overwrite into table test01partition(state='good', city='xiamen');

从其他表导入数据:from test01 insert overwrite table test02 partition(state='good', city='xiamen') select id,name,age,course,body,address;

导出数据到本地文件系统:insert overwrite localdirectory '/home/hns/test' select * from test01;

导出数据到HDFS中:insertoverwrite directory '/home/hns/test' select * from test01;

导出到hive的另一张表:insertinto table test02 partition (age='25') select id, name, tel from test01;

Hive基本语句

建表:

CTRAT TABLEIF NOT EXISTSpage_view(viewTime INT,userid BIGINT)

ROWFORMAT DELIMITED FIELDS TERMINATED BY ‘,’ //指定了列分隔符为,

LINE TERMINATED BY ‘\n’ //指定了行分隔符为换行符\n

PARTITIONEDBY (country STRING, state STRING) //用这两个字段分区

STORED AS TEXTFILE //指定存储文件的格式

删表:

DROPTABLE IF EXISTS page_view;

修改列信息:

ALTERTABLE page_view ADD COLUMNS ( appname STRING COMMENT ‘Application name',sessionid LONG COMMENT ‘ The current session id');

查询:

select* from tablename;(全表查询,生产环境不建议使用,慢且占用资源,仅用作范例)

可添加limit关键字限制查询条数,或where语句筛选查询范围

where… like …:可进行模糊查询,如:

SELECT* from test.scBUS where scBUS.country like concat('%','a1','%')

HAVING子句:允许用户通过一个简单的语法完成原本需要通过子查询才能对GROUP BY语句产 生的分组进行条件过滤的任务,如:

selectsno,sname,stall from student where sage=6 and sex=’男’ group by sno havingstall>167;

join语句:

Hive支持通常的SQL JOIN语句,但是只支持等值连接:

selectdistinct a.sname from student a left join sc b on (a.sno=b.sno);

关于内连接、外连接和半连接:

几种连接区别简单概括为:内连接只显示了俩张表都存在的数据,而外连接则是显示出所有的数据,其中左连接是左外边的表输出完整数据。右外连接是右边的表输出完整数据,全外连接就是两张表的所有行全部输出。做半连接用来补充hive相对于mysql等语句缺失的in/exists这样的子句,就用left semi join代替,和left join的区别在于右边的表数据不会加载进结果;

Orderby和sortby:ORDER BY会对查询结果集执行一个全局排序,所有的数据都通过一个reducer进行处理;SORT BY,其只会在每个reducer中对数据进行排序,也就是执行一个局部排序过程,生产中可以和DISTRIBUTE BY一起用,实现分区并排序。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180727G0XUTS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券