准备离开数据分析这个行业了,将这几年积攒的心血整理一下,希望对数据分析行业的小伙伴有一定的帮助。
目录
一、hive和DB2等关系数据库的关系
hive中元数据存储在关系型管理系统(RDBMS)中,如DB2,Oracle,MySQL等
其他的数据都存储在分布式管理系统(HDFS)中
二、hive视图
-
视图的概念
和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的视图还是有很大的区别:
(1)只有逻辑视图,没有物化视图;
(2)视图只能查询,不能 Load/Insert/Update/Delete 数据;
(3)视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的那些子查询
-
视图的使用
##视图的创建
create view view_cdt as select * from cdt;
##视图的查看
show views;
desc view_cdt;-- 查看某个具体视图的信息
##视图的使用
select * from view_cdt;
##视图的删除
drop view view_cdt;
三、hive自定义函数
UDF(user-defined function)作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)
UDAF(用户定义聚集函数 User- Defined Aggregation Funcation):接收多个输入数据行,并产生一个输出数据行。(count,max)
UDTF(表格生成函数 User-Defined Table Functions):接收一行输入,输出多行(explode)
四、hive/beeline的使用
##hive/beeline后台执行任务
nohup beeline --incremental=true --showHeader=true -f temp.sql >result.txt 2>test.log &
--incremental=true ##输出增量
--showHeader=true ##输出标题
五、hive数据类型
基本数据类型
Hive数据类型 | Java数据类型 | 长度 | 例子 |
TINYINT | byte | 1byte有符号整数 | 20 |
SMALINT | short | 2byte有符号整数 | 20 |
INT | int | 4byte有符号整数 | 20 |
BIGINT | long | 8byte有符号整数 | 20 |
BOOLEAN | boolean | 布尔类型,true或者false | TRUE FALSE |
FLOAT | float | 单精度浮点数 | 3.14159 |
DOUBLE | double | 双精度浮点数 | 3.14159 |
STRING | string | 字符系列。可以指定字符集。可以使用单引号或者双引号。 | ‘now is the time’ “for all good men” |
TIMESTAMP |
| 时间类型 |
|
BINARY |
| 字节数组 |
|
集合数据类型
数据类型 | 描述 | 语法示例 |
STRUCT | 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 | struct() |
MAP | MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 | map() |
ARRAY | 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 | Array() |
六、hive表分类
hive表分为内部表和外部表:
内部表(管理表):删除表后数据也一起删除
外部表:删除表后数据仍然会保存
##查询表类型:
desc formatted student2;
##修改内部表student2为外部表:
alter table student2 set tblproperties(‘EXTERNAL’=’TRUE’);
##修改外部表student2为内部表:
alter table student2 set tblproperties('EXTERNAL'='FALSE');
注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!
##同时添加多个分区
alter table dept_partition add partition(month='201705') partition(month='201704');
##同时删除多个分区
alter table dept_partition drop partition (month='201705'), partition (month='201706');