Hive 基础-进阶
HIVE基础
1,安装:基于hadoop之上,先安装hadoop,安装在另外一篇博客有详细讲到。
2,hive的管理:cli方式,web界面方式
cli方式:直接输入#hive --service cli 或者直接输入hive
web界面方式:
- 默认端口号:9999
- 启动方式:#hive --service hwi &
- 通过浏览器访问:http://<ip地址>:9999/hwi/
提示:如果出现不能发现web程序的war包,是由于当前版本中无hwi的war包,请从hive版本的源代码编译。
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 <函数名>;
暂时这么多。。。。