HIVE基础java
1,安装:基于hadoop之上,先安装hadoop,安装在另一篇博客有详细讲到。web
2,hive的管理:cli方式,web界面方式数据库
cli方式:直接输入#hive --service cli 或者直接输入hive数组
web界面方式:浏览器
- 默认端口号:9999函数
- 启动方式:#hive --service hwi &oop
- 经过浏览器访问:http://<ip地址>:9999/hwi/fetch
提示:若是出现不能发现web程序的war包,是因为当前版本中无hwi的war包,请从hive版本的源代码编译。spa
3,hive的远程服务(这是用jdbc或者odbc连接数据仓库hive必须的前提)操作系统
-端口号 10000
-启动方式:#hive --service hiveserver &
4,hive基本数据类型:
-整数类型:tinyint、smallint、int、bigint
-浮点数类型:float、double
-布尔类型:boolean
-字符串类型:srting
5,hive复杂数据类型:
-数组:array 由一系列相同的数据类型的元素组成
-集合:map 包含key->value 键值对,经过key来访问元素。
-结构:struct 包含不一样数据类型的元素,这些元素经过“点语法”的方式来获得所须要的元素。
6,hive时间类型:
-data:描述特定的日期
-timestamp:是一个数据,时间戳
7,hive的表的类型
内部表(table):与数据库中的table在概念上相似。
外部表(exrernal table):指向已经在HDFS中存在的数据,能够建立partition。
分区表(partition):在hive中,表中的一个partition对应于表下的一个目录,全部的partition的数据都存储在对应的目录中。
例:建立基于性别的以逗号分隔的分区表:
create table partition_table(id int, name string ) partitioned by (gender string) row format delimited fields terminated by ',';
桶表(bucket table):桶表是对数据进行哈希取值,而后放在不一样的文件中存储。
例:create table bucket_table (id int ,name string,...)
视图:视图是虚表,是一个逻辑概念。
HIVE进阶
1,hive数据导入:
语法:
load data [local] inpath 'filepath' [overwrite] into table tablename [partition(partcoll = vall, partcol2=val2...)]
[local]:表示从操做系统的硬盘目录上进行数据导入,若是不写,表上从hdfs的一个目录进行导入。
[overwrite]:表示十分要覆盖表中已经存在的数据。
[partition...:若是是分区表,用此来指明导入到哪一个分区。后面是分区条件。
注意:若是想要把某个目录下的全部文件都导入到表中,在填入‘filepath’文件路径时只须要写文件路径,不须要指明哪个文件。
2,hive的数据查询:
查询语法:
select [all/distinct] select_expr,select_expr,...] from tablename b where xx group by xx clister by xx
tablename b:此操做是在查询的同时为了简化输入,给表tablename取别名为b
查询中使用计算:
在查询语句时候能够添加查询字段自身或者字段之间的相互计算,直接得出结果。
查询中不计算空值:用 is not null 语句来实现。
fetch task功能:此功能开启后,执行简单的(不计算,不排序等)的查询语句,就不会mp的做业,能够提升查询效率。
3,hive函数:
数学函数:round 四舍五入取整 ceil 向上取整 floor 向下取整
字符函数:lower 转换小写 upper 转换大写 length 显示字符长度 concat 拼加一个字符串 substr 求字符串的子串
trim 去掉一个字符串先后的空格 lpad 左填充 rpad 右填充
收集函数:size 返回map集合中的个数
select size(map(<key,value>,<key,value>,....)); 返回结果为2
转换函数:cast 把不一样数据转换成其余数据类型
select cast (1 as bigint); 把1转换成bigint类型
日期函数:to_data:取出一个字符串中间日期的部分
year month day :分别取出一个日期中的年月日
weekofyear:返回一个日期在一年中是第几个星期
datediff:两个日期相减,返回他们之间的天数。
date_add:在一个日期值上加上多少天
data_sub:在一个日期值上减去多少天
条件函数:coalesce:从左到右找到第一个不为空的值
case a when b then c else f end:若是a知足b条件时返回c,不然返回f,以end为结束语。
聚合函数:count sum min max avg
4,hive的表链接:
等值链接:以=号为条件
不等值链接:以<,>,<>号为条件查询的链接
外链接:经过外链接能够将对于链接条件不成立的记录任然包含在最后的输出结果中。
左外链接:显示链接条件左边表中不成立的记录==select a.x from a left outer join b on a.id=b.id
右外链接:显示链接条件右边表中不成立的记录==select b.x from b right outer join b on a.id=b.id
自链接:经过表的别名将同一张表视为多张表。
select e.ename,b.bname from emp e, emp b where e.mgr=b.empid; 给一张emp表同时取两个别名,这样就认为是两张表,就能够用别名来设置查询条件。
5,子查询:查询条件where里面嵌套另一个查询语句
6,hive自定义函数:
建立临时函数:hive>create temporary function<函数名> as 'java 类名’;
删除临时函数:hive>drop temporary function <函数名>;
暂时这么多。。。。