学习hive

本文详细介绍了Hive的使用,包括Hive如何将SQL转化为MapReduce任务,创建与管理表,交互式查询,数据导入与导出,内部表与外部表的区别,以及分区操作。此外,还涵盖了Hive的DML操作,如插入数据、更新与删除,以及Hive的存储文件格式。最后,文章讨论了Hive的函数和自定义函数的实现,为Hive初学者提供全面的指导。
摘要由CSDN通过智能技术生成

学习hive
1.hive是一个可以将sql翻译为mr程序的工具,支持用户将hdfs上的文件映射为表结构,进行查询
2.HIVE将用户定义的库、表结构等信息存储hive的元数据库
3.hive的查询方式
第一中:交互式查询
hive>select * from t_1;
第二种:将hive作为命令一次性运行
hive -e "use default;create table tset_1(id int,name string); "
将sql写入一个文件比如q.hql,然后用hive命令执行,
hive -f q.hql
第三种:将方式二写入一个xxx.sh脚本中
4.建表:
4.1:表定义信息会被记录到hive的元数据(mysql的hive库)
4.2:会在hdfs上的hive库目录中创建一个跟表名一致的文件夹
4.3:查看表的结构
hive> desc test_1;
4.4:编辑文本
vi test_1.txt
1,zhang,12
2,xailjsn,50
4.5.上传文件到hdfs并查看
hadoop fs -put test_1.txt /user/hive/warehouse/test_1
hive> select * from test_1;
结果和预想的不一样,这是因为建表语句是:create table test_1(id string,name string,age int);并没有指定分隔符”,”
4.6.删除表
hive> drop table test_1;
4.7.重新编辑文件
create table test_1(id string,name string,age int)
row format delimited
fields terminated by ‘,’;
上传文件,和我们想要的结果一样
5.内部表与外部表
5.1外部表: create external table t_3(id int,name string,salary bigint,add string)
row format delimited
fields terminated by ‘,’
location ‘/aa/bb’;
其中externa为关键字
5.2内部表: create table t_2(id int,name string,salary bigint,add string)
row format delimited
fields terminated by ‘,’
location ‘/aa/bb’;

load data local inpath ‘/home/salary.txt’ into table t_2;
将table_2加载到salary.txt中
5.3区别:
内部表的目录由hive创建在默认的仓库目录下:/user/hive/warehouse/…
外部表的目录由用户建表时自己指定: location ‘/位置/’

   drop一个内部表时,表的元信息和表数据目录都会被删除;
   drop一个外部表时,只删除表的元信息,表的数据目录不会删除;

5.4意义:
通常,一个数据仓库系统,数据总有一个源头,而源头一般是别的应用系统产生的,
其目录无定法,为了方便映射,就可以在hive中用外部表进行映射;并且,就算在hive中把
这个表给drop掉,也不会删除数据目录,也就不会影响到别的应用系统
6.分区关键字 PARTITIONED BY
hive> create table test_4(ip string,url string,staylong int)
partitioned by (day string)
row format delimited
fields terminated by ‘,’;
注意分区的day不能存在于表字段中
6.1:准备数据
[root@hdp01 home]# vi pv.data.2019-05-10
192.168.9.10,www.a.com,1000
192.168.10.10,www.b.com,100
192.168.11.10,www.c.com,900
192.168.12.10,www.d.com,100
192.168.13.10,www.e.com,2000

6.2:导入数据到不同的分区目录:
hive> load data local inpath ‘/home/pv.data.2019-05-10’ into table test_4 partition(day=‘2019-05-10’);
查看192.168.72.110:50070的 /user/hive/warehouse/test_4
可以看到有一个day=2019-05-10的文件夹,说明分区成功
在这里插入图片描述
6.3:准备数据
[root@hdp01 home]# vi pv.data.2019-05-11
192.168.9.11,www.f.com,100
192.168.10.12,www.g.com,10
192.168.11.13,www.h.com,90
192.168.12.14,www.i.com,10
192.168.13.15,www.g.com,200
6.4:导入数据到不同的分区目录:
hive> load data local inpath ‘/home/pv.data.2019-05-11’ into table test_4 partition(day=‘2019-05-11’);
在这里插入图片描述
在这里插入图片描述
6.5:查询:
hive> select * from test_4;
6.6:可以分区查:
hive> select * from test_4 where day=“2019-05-11”;
6.7:查看2019-05-11这天的访问人数:
select distinct ip from test_4 where day=“2019-05-11”;
7.导入数据
7.1:将hive运行所在机器的本地磁盘上的文件导入表中:
hive> load data local inpath ‘/home/pv.data.2019-05-11’ overwrite into table test_4 partition(day=”2019-05-12”);
7.2:将hdfs中的文件导入表中:
hive> load data inpath ‘/user.data.2’ into table t_1;
:不加local关键字,则是从hdfs的路径中移动文件到表目录中;
7.3:从别的表查询数据后插入到一张新建表中:
hive> create table t_1_jz
as
select id,name from test_1;
7.4:从别的表查询数据后插入到一张已存在的表中
加入已存在一张表:可以先建好:
hive> create table t_1_hd like test_1;
从test_1中查询一些数据出来插入到t_1_hd中:
hive>insert into table t_1_hd
select
id,name,age
from test_1
where name=‘ZDP’;
7.5:查找名字带有L的:
insert into table t_1_hd
select
id,name,age
from test_1
where name like’%L’;
7.6:关于分区数据导入另外一张表建表
hive> create table t_4_hd like test_4;
hive> insert into table t_4_hd partition(day=‘2019-04-10’) select ip,url,staylong from test_4 where day=‘2019-05-10’;
8. 导出数据
8.1将数据从hive的表中导出到hdfs的目录中
hive> insert overwrite directory ‘/aa/test_1’
select * from test_1 where name=‘lis’;
在这里插入图片描述
:即使hdfs中没有/aa/bb/目录,也会自动生成
hive> insert overwrite local directory ‘/aa/test_1_2’
row format delimited
fields terminated by ‘,’
select * from test_1 limit 100
hive -e “select * from test_1” | tr “\t” “,” > result.csv
下载到windows下是这样的:
在这里插入图片描述
8.2:将数据从hive的表中导出到本地磁盘目录中:
hive> insert overwrite local directory ‘/aa/bb’
select * from test_1 ;
9. HIVE的存储文件格式
9.1:HIVE支持很多种文件格式: SEQUENCE FILE | TEXT FILE | PARQUET FILE | RC FILE
默认为TXT格式,SEQUENCE FILE为链式
9.2:试验:先创建一张表t_seq,指定文件格式为sequencefile
hive> create table t_seq(id int,name string)
stored as sequencefile;
9.3:然后,往表t_seq中插入数据,hive就会生成sequence文件插入表目录中
hive> insert into table t_seq
select * from test_1 ;
10 修改表的分区:
10.1:查看表的分区 show partitions 表名;
hive> show partitions test_4;
10.2:添加分区
hive> alter table test_4 add partition(day=‘2019-05-12’) partition(day=‘2017-04-13’);
10.3:添加完成后,可以检查t_4的分区情况:
hive> show partitions test_4;
10.4:然后,可以向新增的分区中导入数据:
–可以使用load
hive> load data local inpath ‘/root/pv.data.2019-05-12’ into table test_4 partition(day=‘2019-05-12’);
hive> select * from test_4 where day=‘2019-05-12’;
–还可以使用insert
insert into table test_4 partition(day=‘2019-05-16’) select * from test_4 where staylong>80 and partition(day=‘2019-05-11’);
Hive> insert into table test_4 partition(day=‘2019-05-13’)
select ip,url,staylong from test_4 where day=‘2019-05-11’ and staylong>20;
hive> select * from test_4 where day=‘2019-05-13’;
10.5: 删除分区
hive> alter table test_4 drop partition (day=‘2019-05-13’);
hive> select * from test_4;
11.修改表的列定义
11.1:查看t_seq表的定义
hive> desc t_seq;
11.2:添加列:
hive> alter table t_seq add columns(address string,age int);
11.3:查看t_seq表的定义
hive> desc t_seq;
11.4:全部替换:
hive> alter table t_seq replace columns(id int,name string,address string,age int);
11.5:修改已存在的列定义:
hive> alter table t_seq change id uid string;
12. 显示命令
hive> show tables
hive> show databases

好的,那我可以为您提供一些学习Hive SQL的资源和建议。 1. 官方文档 首先,您可以参考Hive官方文档中关于Hive SQL的部分。官方文档提供了很详细的介绍和示例,可以帮助您快速入门。 链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual 2. 外部资源 除了官方文档,还有一些外部资源可以帮助您学习Hive SQL。以下是一些推荐的资源: - Hive Tutorial:这是一份比较全面的Hive教程,包括Hive SQL的基本语法、DDL、DML、函数等内容。链接:https://www.tutorialspoint.com/hive/index.htm - Hive Cheat Sheet:这是一份Hive SQL的速查表,可以帮助您快速查找Hive SQL的语法和用法。链接:https://www.edureka.co/blog/wp-content/uploads/2019/07/Hive-Cheat-Sheet.pdf - Hive Cookbook:这是一份Hive SQL的实战指南,通过一些常见的场景和问题,来帮助您深入理解Hive SQL的使用和优化。链接:https://www.oreilly.com/library/view/hive-cookbook/9781449328714/ 3. 实践项目 最后,我建议您通过实践项目来学习Hive SQL。通过实际操作,您可以更深入地了解Hive SQL的使用和优化技巧。以下是一些可以参考的实践项目: - Kaggle竞赛:Kaggle上有很多与Hive SQL相关的数据分析和数据挖掘竞赛,您可以参加这些竞赛来练习Hive SQL的使用。 - Github项目:Github上也有很多Hive SQL的开源项目,您可以参考这些项目来学习Hive SQL的最佳实践和优化技巧。 希望以上资源对您有所帮助,祝您学习愉快!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值