1. hive配置文件

1
/etc/hive/2.6.4.0-91/0

2. hive2启动

1
hive

3. hive2查看外部表还是内部表

1
2
3
4
5
6
方法一:describe extended 表名;
# 在详细信息的最后一行
# 如果是外部表,则tableType:EXTERNAL_TABLE;
# 如果是内部表,则tableType:MANAGD_TABLE;
方法二:desc formatted 表名;
# 还可以查看表的location

4. 内部表

4.1 建立

1
2
3
4
5
6
create table if not exists 表名
(sid int,sname string)
row format delimited fields terminated by ' '
stored as textfile;
# 说明:
在导入数据的过程中,如果在建表的过程中没有指定location,那么就会在hive.metastore.warehouse.dir指定的路径下,以表名创建一个文件夹,之后所有有关该表的数据都会存储到此文件夹中。

4.2 导入数据


1
2
3
4
# 目标文件的格式:‘utf-8’
load data [local] inpath '目标文件' [overwrite] into table 表名 [partition (partcloo=vall)]
# 示例:
load data local inpath '/root/hive2_file/in_table.txt' overwrite into table in_table;

4.3 删除该表

1
2
3
drop table 表名;
# 说明:
当我们在删除内部表的时候,不仅删除了表中的数据,还删除了数据文件。

5. 外部表

5.1 建表

1
2
3
4
5
6
create external table if not exists 表名
(id int,name string,class string,score int)
row format delimited fields terminated by '\t'
stored as textfile;
# 说明:
在导入数据的过程中,如果在建表的过程中没有指定location,那么就会在hive.metastore.warehouse.dir指定的路径下,以表名创建一个文件夹,之后所有有关该表的数据都会存储到此文件夹中。

5.2 导入数据


1
2
3
4
# 目标文件的格式:‘utf-8’
load data [local] inpath '目标文件' [overwrite] into table 表名 [partition (partcloo=vall)]
# 示例:
load data local inpath '/root/hive2_file/out_table.txt' overwrite into table out_table;

5.3 删除该表

1
2
3
drop table out_table;
# 说明:
HDFS中数据文件在表被删除的情况下,还是存在的,也就是说删除外部表,只能删除表数据,并不能删除数据文件。

6. 内部表与外部表的差异

  • 创建外部表需要添加 external 字段。而内部表不需要。
  • 删除外部表时,HDFS中的数据文件不会一起被删除。而删除内部表时,表数据及HDFS中的数据文件都会被删除。

7. 分区表

select查询中会扫描整个表内容,会消耗大量时间。由于相当多的时候人们只关心表中的一部分数据,
故建表时引入了分区概念。

hive分区表:是指在创建表时指定的partition的分区空间,若需要创建有分区的表,
需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。

7.1 创建分区表

1
2
3
4
5
6
7
# 可以创建单分区或者多分区,partitioned by(... , ...);
create table if not exists partition_table
(id int,name string,class string,score int)
partitioned by (time string)
row format delimited
fields terminated by '\t'
stored as textfile;

7.2 导入数据

1
2
3
4
# 导入单分区表数据
load data local inpath '/root/hive2_file/out_table.txt' into table partition_table partition(time='term2');
# 导入多分区表数据
load data local inpath '/root/hive2_file/output_table.txt' into table par_much_table partition(term='term1',status='test');

7.3 增加分区(表已创建,在此基础上添加分区)

1
2
# 说明:仅在表的目录下面增加目录,当有location指令时,则表示路径下的文件与表联系起来了。
alter table 表名 add partition (time='term3') [location 'hdf路径(目录)']

7.4 删除分区

1
alter table 表名 drop partition (....);

7.5 查看分区语句

1
show partitions 表名;