创建管理表(内部表):
创建方式1:
create table [IF NOT EXISTS] test.user
(
id int [COMMENT '该字段的注释'],
name string,
age int
)
[COMMENT '对该表的注释']
//行之间的分隔符为空格
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
//列之间的分隔符默认为换行符,一般不写
[COLLECTION ITEMS TERMINATED BY '\n']
//存储格式为普通的文本文件,企业多用parquet和orc,效率高
STORED AS textfile
//表默认会创建在数据库的目录下,也可单独指定:
LOCATION '/user/hive/warehouse/user';
创建方式2:
//子查询创建表
create table IF NOT EXISTS test.user2
AS select id,name from test.user;
创建方式3:
//复制已存在的表
create table IF NOT EXISTS test.user3
LIKE test.user;
加载数据进入表:
//加了local就是linux本地文件,没加就是hdfs上的文件
//本质是直接将数据文件复制到该表的目录下,方便快捷
//overwrite 覆盖数据
load data local inpath '/opt/datas/user.txt' [overwrite] into table test.user;
hdfs目录下:
创建外部表(加了一个external):
//外部表与内部表区别:删除外部表不会删除表数据,只删除元数据;
// 删除内部表既删除表数据,也删除元数据;
// 即删除外部表后,在hdfs下的表的目录还在,只是hive中搜不到该表
create EXTERNAL table [IF NOT EXISTS] db_hive.user_ext
(
id int [COMMENT '该字段的注释'],
name string,
age int
)
[COMMENT '对该表的注释']
//行之间的分隔符为空格
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
//列之间的分隔符默认为换行符,一般不写
[COLLECTION ITEMS TERMINATED BY '\n']
//存储格式为普通的文本文件,企业多用parquet和orc,效率高
STORED AS textfile
//表默认会创建在数据库的目录下,也可单独指定:
LOCATION '/user/hive/warehouse/user';
创建分区表:
//分区表即在hdfs目录下,在该表的目录下将那些数据文件分成多个目录,
//不用每次查询都将所有数据加载出来,
create table IF NOT EXISTS test.user_partitioned
(
id int,
name string,
age int
)
PARTITIONED BY (date string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS textfile;
分区表中加载数据:
load data local inpath '/opt/datas/user.txt' into table test.user_partitioned
partition(date='2018/12/1');
hdfs中分区表目录:
查看分区表中数据:
//若是普通表查找会在整个表目录下加载所有数据文件,
//而分区表加了个分区字段可以只查询某个分区的数据文件
select * from test.user_partitioned where date='2018/12/1';
select * from test.user_partitioned where date='2018/11/30';
多级分区表:
create table IF NOT EXISTS test.user_partitioned_multiple
(
id int,
name string,
age int
)
PARTITIONED BY (month string,day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS textfile;
hdfs目录结构:
分区表分区未写入元数据中:
第一种修复方式:
//用于手动在hdfs下分区表目录下添加分区目录,但为写入表元数据,需修复
//例:
// dfs -mkdir -p /user/hive/warehouse/table_name/day=12;
// dfs -put /opt/datas/user.txt /user/hive/warehouse/table_name/day=12;
msck repair table table_name;
第二种修复方式(企业多用):
//用于手动在hdfs下分区表目录下添加分区目录,但为写入表元数据,需修复
alter table table_name add partition(day='12');
查看表有多少个分区:
show partitions table_name;
清除表数据:
truncate table test.user;
修改表的名称:
alter table user rename to user10;
删除表:
drop table if exists test.user10;