Hive基础笔记
安装Hive并连接MySQL
ubuntukylin-22.04.1安装Hive、MySQL、配置Hive及Hive连接MySQL操作
启动/退出Hive
启动并登陆mysql shell
service mysql start # 启动mysql服务
mysql -u root -p # 登陆shell界面
启动hive之前,请先启动hadoop集群
启动hive
进入hive安装目录(笔者的安装目录为/usr/local/hive)
cd /usr/local/hive
./bin/hive
退出Hive交互式执行环境
exit;
相关操作
创建数据库:
create database ykb;
创建数据库并指定创建位置:
create database tt
> location '/tt.db';
创建表并指定位置且定义数据结构:
create table tt
> (id int,name string,address struct<city:string,distrct:string>,info map<string,string>)
> location '/tt.db/tt';
以’,‘,’|‘,’;'为分隔符创建表:
create table gstudent2
> (id int,name string,address struct<city:string,distrct:string>,info map<string,string>)
> row format delimited
> fields terminated by ','
> collection items terminated by '|'
> map keys terminated by ';';
eq:
以’,'为分隔符创建表:
内容:
1,五四运动,1919-5-4,北京
2,中共一大,1921-7-23,上海
3,遵义会议,1935-01-15,遵义
4,中共八大,1956-9-15,北京
5,中共十一届三中全会,1978-12-18,北京
6,中共十八大,2012-11-8,北京
create table event
> (eid int,ename string,edate string,place string)
> row format delimited fields terminated by ',';
show databases; #查看所有数据库
show databases like 'h.*'; #查看以h开头的数据库
use hive; #切换到hive数据库下
describe hive; #查看hive表的信息
数据导入:
- 在终端输入:
hdfs dfs -put ~/gstudent2.txt /tt.db/gstudent2
- 在hive中输入:
从本地导入到hive:
load data local inpath '/home/hadoop/gstudent2.txt' [overwrite] into table gstudent2;
从hdfs导入到hive:
load data inpath '/gstudent2.txt' [overwrite] into table gstudent2; # 相当于移动,hdfs dfs -mv
导出数据:
insert overwrite local directory '/home/hadoop/daochu/event'
> select * from event;
格式化导出数据到本地:
insert overwrite local directory '/home/hadoop/daochu/event'
> row format delimited fields terminated by '/t'
> select * from event;
利用hdfs命令导出:(需事先创建导出文件夹)
hdfs dfs -get /user/hive/warehouse/history.db/event ./daochu;
set hive.cli.print.header=true; 查看数据时显示表头
用于指定查询返回结果中重复的行如何处理,默认值为all返回所有匹配的行,distinct从结果集中删除重复行:
select [all/distinct] 所要查询的列 from 表名;
查看数据:
select * from tt;
1 五四运动 1919-5-4 北京
2 中共一大 1921-7-23 上海
3 遵义会议 1935-01-15 遵义
4 中共八大 1956-9-15 北京
5 中共十一届三中全会 1978-12-18 北京
6 中共十八大 2012-11-8 北京
查询事件的名称和发生地:
select ename,place from event;
查询发生在北京的事件的名称和发生时间:
select ename,edate from event where place='北京';
查询出生日期在1885年以后的人物:
select * from event where edate > '1885-1-1';
查询事件3的事件名:
select ename from event where eid=3;
查询人物名:
select pname from participant;
返回所有匹配的行 去除重复的结果:
select distinct age from stu;
找出学院名字母长度等于2的有哪些:
select * from stu where length(department) =2;
找出属于计算机与计科学院的年龄为18岁的学生信息:
select * from stu where department=‘jike’ and age = 18;
根据学院对表stu进行分组:
select * from stu group by department;
对输出的结果进行全局排序,默认排序为升序(ASC),也可以指定为DESC降序:
根据字段进行排序:
select * from stu where class = '211' order by name;
根据字段进行降序排序:
select * from stu where class = '130211‘ order by name desc;
内连接:内连接是最常见的一种连接,它也被称为普通连接,其中inner可以省略:inner join == join;只有进行连接的两个表中都存在与连接条件相匹配的数据才会被留下来
inner join 查看学生的姓名,班级,课程号与成绩:
select stu.stuname,stu.class,score.coursenum,score.score from stu join score on stu.stuname=score.stuname;
等价于 隐式连接表示法:
select stu.stuname,stu.class,score.coursenum,score.score
> from stu,score
> where stu.stuname=score.stuname;
向表中插入内容:
insert into table 表名 values(7,'内容','内容','内容','内容');
将人物名,人物简介导出到新表pnew:
首先创建新表pnew:
create table pnew
> (pname string,desc string)
> row format delimited fields terminated by ' ';
将人物名,人物简介导出到新表:
insert overwrite table pnew
> select pname,content from participant;
查表的细节(获取表的元数据描述信息):
desc formatted gstudent2;(DESCRIBE FORMATTED 表名;)
删除表:
drop table [if exists] usr1;
删除数据库和它中的表:
drop database [if exists] hive cascade;
显示当前正在使用的数据库:
select current_database();