视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
[置顶]数据仓库----Hive进阶篇一
2020-11-09 16:30:17 责编:小采
文档


数据仓库—-hive进阶篇二(表的链接,子查询,客户端jdbc和Thrift Client操作,自定义函数) 一、数据的导入 1、使用Load语句执行数据的导入 1.语法: 其中(中括号中表示可加指令): LOCAL:表示指定的文件路径是否是本地的,没有则说明是HDFS上的文件路径

数据仓库—-hive进阶篇二(表的链接,子查询,客户端jdbc和Thrift Client操作,自定义函数)

一、数据的导入

1、使用Load语句执行数据的导入

1.语法:

 其中(中括号中表示可加指令):
 LOCAL:表示指定的文件路径是否是本地的,没有则说明是HDFS上的文件路径。
 OVERWRITE:表示覆盖表中的已有数据。
 PARTITION ():如果是向分区表中导入数据的话需要指定分区。
2.实例:
 (1).无分区情况:

 其中的'/root/data'可以是路径也可以是文件:
 路径表示把该路径下的所有文件都导入到表中;
 文件表示只把当前文件导入到表中。
 (2).有分区情况:

2、使用Sqoop进行数据的导入

1.使用sqoop将mysql数据库中的数据导入到HDFS中
hive> sqoop import --connect jdbc:mysql://localhost/3306/sfd --username root --password 123 --table student --columns 'sid,sname' -m 1 --target-dir '/sqoop/student'
 其中:
 --connet :表示数据库的url链接
 --username :数据库用户名
 --password :数据库用户密码
 --table :源数据所在的表
 --clomns : 表中的列名,(例子中使用',' 链接)
 -m 1 : 表示启用的mapreduce个数为1个
 --target-dir : 将源数据导入到HDFS上的那个文件夹下

2.使用sqoop将mysql数据库中的数据导入到hive中:
hive> sqoop import --hive-import --connect jdbc:mysql://localhost/3306/sfd --username root --password 123 --table student --columns 'sid,sname' -m 1 --hive-table stu --where 'sid=1'
 其中:
 --hive-table stu : 表示在导入到hive中名为stu的表中
 --where :表示插入数据的条件

3.使用sqoop将mysql数据库中的数据导入到hive中,并使用查询语句;
hive> sqoop import --hive-import --connect jdbc:mysql://localhost/3306/sfd --username root --password 123 -m 1 --query 'select * from student where sid='1' and $CONDITIONS' --target-dir '/sqoop/student1' --hive-table stu 
 其中:
 --query : 表示使用的查询语句,如果查询语句中有where条件那么必须加上 and $CONDITIONS(大写)

4.使用sqoop将hive中的数据导出到mysql中:
hive> sqoop export --connect jdbc:mysql://localhost/3306/sfd --username root --password 123 -m 1 --table student1 --export-dir '/data'
 其中:
 --table :为mysql数据库中的已经建立了的表
 --export-dir :将数据这个文件夹下的数据导入到mysql的student1表中。

二、Hive的数据查询

1、 查询的语法:

 例子:查询student表中的信息:
 select * from student;(查询所有信息不用启用mapreduce)
 select sid from student;(需要启动mapreduce)
 select sid,sname,math,english,math+english from student;(在(math+english)表达式中如果有一个变量为空那么整个表达式为空,可以使用nvl(math,0)函数,表示如果math为空令其为0)

2、简单查询的Fetch Task功能,

从上面的例子中可以看出,简单的查询如果不是查询所有的信息,就会开启mapreduce任务,这样会影响工作效率,从Hive0.10.0版本开始支持了Fetch Task功能;
Fetch Task功能配置方式:
 a. 方式一: set hive.fetch.task.conversion=more
 b. 方式二: hive --hiveconf hive.fetch.task.conversion=more
 c. 方式三: 修改hive-site.xml文件

 前两种方式只在当前hive命令行有用,当重启hive时简单查询还是会调用mapreduce程序;而第二种方式配置是一直起作用的。

3.、在查询中使用过滤

1.where 语句进行过滤。(字符串过滤区分大小写)

 其中:%\\_% : 由于_是模糊查询中的关键词(表示有一个字符),所以要用到转义字符,第一个'\'表示后面使用的是转义字符,'\_'表示的是'_';

4、在查询中排序

排序默认是升序的,要想降序只需在末尾加上desc

注意:当使用序号进行排序的使用需要设置一个属性:set hive.groupby.orderby.position.alias=true;


三、Hive的内置函数

1、数学函数:

round(45.926,2):四舍五入(第二个参数表示的是保留小数点后面几位,当参数为负数是表示的是小数点前)


ceil(45.9):向上取整
floor(45.9):向下取整

2、字符函数:

lower:把字符串转换成小写
upper:把字符串装换成大写
length:字符串的长度
concat('hello','world'):添加一个字符串
substr(a,b):截取字符串:(从a中,第b为开始取,取到右边所有的字符)
substr(a,b,c):截取字符串:(从a中,第b为开始取,取c个字符)
trim:去掉字符串两端的空格
lpad('abc',10,'*'):左填充
rpad:右填充

3、收集函数和转换函数:

1,收集函数:
 size:

2,转换函数:
 cast:cast(1 as bigint);

4、日期函数:

to_data:取出字符串中的日期部分

year:取出日期中的年
month:取出日期中的月
day:取出日期中的日

weekofyear:返回一个日期在一年中是第几个星期

datediff:两个日期相减返回相差的天数

date_add:在一个日期上加上多少天
date_sub:在一个日期上减去多少天

5、条件函数:

coalesce(a,b,...):从做到右返回第一个不为null的值

case...when...: 条件表达式
 case a when b then c [when d then e]* [else f] end

6、聚合函数:

count:个数
sum:求和
min:求最小值
max:求最大值
avg:求平均值

7、表生成函数:

explode:把一个map集合或者是array数组中的一个元素单独生成一行


数据仓库—-hive进阶篇二

下载本文
显示全文
专题