一、hive分区
-
分区操作属于hive操作的重量级操作
-
分区在hdfs上物理结构是目录
-
非严格模式:no~
动态分区要打开非严格模式
二、表数据删除方法对比说明:
drop,delete,truncate
联系:都可以达到删除数据的目标。
区别:Drop:把数据和元数据全删除;
delete:按照条件删除数据;(只会删除实体数据)
Truncate:截断数据,元数据不动,状态数据会删掉。
大数据环节中写入要注意:
1.是否要求输出目录存在;
上传要求put copy需要
写入基本不需要
2.写模式,是覆盖写,还是增量写
覆盖是两步,先删,再写(overwrite)
增加是在尾部
二、DQL
1,各种join使用,Union(上下)
inner join
将左表和右表满足联接条件的数据,全部查询出来
left outer join
以左表为主,将左表数据全部保留,右表没有关联上数据字段置成NULL
right outer join 同理
full outer join
没有关联上数据字段全部置成NULL
full join=inner join+left join+right join
union [all]
将所有表数据,完全叠加在一起,不去重。(没有all则为去重)
要求:所有表的字段和类型完全一致。
注意hive中子查询必学给与别名
2,内置函数(系统函数)
使用help解决一个函数不知道怎么用的问题:
desc function{方法}
三、常用函数:
count:行数
IF( Test Condition, True Value, False Value ) :判断
COALESCE( value1,value2,… )返回函数第一个不为空的值:
case…when :判断
split:将字符串拆分成数组。
explode:表成生成函数
lateral view:与explode连用制表
三、自定义函数
-
UDF(user defined function)
-
流程
自定义一个java类
继承UDF类
约定俗成的重写evaluate方法
打包类所在项目成一个all-in-one的jar包并上传到hive所在机器(hdfs dfs -put)
在hive中执行add jar操作,将jar加载到classpath中。(add jar /路径)
在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数(
create temporary function 方法名 as 方法类路径)
hive sql中像调用系统函数一样使用udf函数 -
加入maven配置主要是引入hive cli包
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-cli</artifactId>
<version>1.2.1</version>
<scope>provided</scope>
</dependency>