启动Hive
第一种方式,直接进入bin目录下输入hive即可。
第二种方式:
第一步:后台启动hiveserver2服务端
nohup hive --service hiveserver2 &
第二步:在bin目录下输入beeline指令
然后输出
!connect jdbc:hive2://node03:10000连接到hive的客户端
第三步:输入用户名密码即可进入
数据库的操作
1.创建一个数据库
create database +数据库名称
Hive中创建的数据库实际上实际上是HDFS上的一个文件夹,数据库中的各个表相当于HDFS上文件夹里面的一些文件。
在mysql数据库有一个hive的数据库
这个数据库存储的是Hive的一些元数据信息,包括了存储在HDFS的文件的路径。
2.创建一个数据库并指定其存储在HDFS上的位置
create database 库名 location 文件路径
eg:
create database myhive2 location ‘/myhive2’;
3.修改数据库的一些属性
alter database 库名 set 属性字段=’’
4.查看数据库的一些详细的信息
desc database (extended) 库名
5.删除数据库
若数据库中没有表,可以通过drop database 库名 删除数据库。
若数据库中已经存在表,并且需要删除所有表中的数据,则通过drop database 库名 cascade;
Hive中表的一些操作
Hive中表的一些分类
内部表:创建内部表时会将数据移动到数据仓库指向的路径。
外部表:创建外部表时需要添加external关键字,会指定一个指向实际数据的路径,但不会对数据的实际位置做出改变。在删除表的时候,内部表的元数据和所有数据都会被删除,而外部表只删除元数据,不删除其他的数据。
分区表:使用关键字partitioned by.将一个表分成若干个小表。即分成若干个文件。
eg:创建一个根据month分区的分区表
create table student(int age,name string) partitioned by (month string,day string) row format delimited fields terminated by ‘\t’.
加黑的字段表明:创建的表是以制表符号’\t’作为分隔符来映射到源文件。
分桶表:
分桶表是什么?
Hive中表的分区和分桶都是将表进行拆分,分区是根据自定义的名字将表划分成不同的文件夹,而分桶是根据表中的字段进行hash,然后根据hash值除以桶的个数进行求余,决定该条记录存放在哪个桶中。分桶相当于对表进行更细一步的拆分。
如何创建分桶表?
首先,需要开启Hive的桶表功能。
set hive.enforce.bucketing=true
然后设置reduce的个数。
set mapreduce.job.reduces=3
创建桶表,使用clustered by(列字段名) into xxx buckets 关键字
eg:
create table course (c_id string,c_name string,t_id string) clustered by(c_id) into 3 buckets row format delimited fields terminated by ‘\t’;
最后一步:
将数据加载到分桶表中
insert overwrite
表的一些操作
创建表
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], …)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], …)]
[CLUSTERED BY (col_name, col_name, …)
[SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
向表中加载数据
1.向一个空表中加载数据
load data local inpath ‘本地的路径’ into table 表名;
2.覆盖非空表中的数据
insert overwrite table 表名
清空表中的数据
truncate table 表名
注意:只能清空内部表
在Hive表中加载数据
1.直接向分区表中插入数据
insert into table legendlee partition (month=‘201901’) values(‘001’,‘002’,‘003’);
2.将数据加载到表中
load data local inpath ‘/export/servers/hivedatas/score.csv’ overwrite into table score.
3.通过查询的方式加载数据
create table score4 like score;
insert overwrite table score4 select s_id,c_id,c_score from score;
多插入的模式
什么是多插入模式?
把一张表拆分成两个部分或者多个部分,然后在给表加载数据。
1.创建第一张部分表
create table score_first( s_id string,c_id string) partitioned by (month string) row format delimited fields terminated by ‘\t’ ;
2.创建第二张部分表
create table score_second(c_id string,s_score int) partitioned by (month string) row format delimited fields terminated by ‘\t’;
3.向表中加载数据
from score insert overwrite table score_first partition(month=‘201806’) select s_id,c_id insert overwrite table score_second partition(month = ‘201806’) select c_id,s_score;
表明加载数据成功了。
将查询的结果保存到一张表中
create table score5 as select * from score;
创建表时通过location指定存储在hdfs上的路径
1.在hdfs创建文件夹
hdfs dfs -mkdir -p /myscore6
2.向myscore6文件中放数据文件
hdfs dfs -put score.csv /myscore6
3.创建表
create external table score6 (s_id string,c_id string,s_score int) row format delimited fields terminated by ‘\t’ location ‘/myscore6’;
4.查询数据
select * from score6
Hive表中数据的导入与导出
1.insert 将查询结果导出到本地
insert overwrite local directory ‘/export/servers/exporthive’ select * from score;