1.1 创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name #创建数据库
[COMMENT database_comment] #数据库的描述
[LOCATION hdfs_path] #存储路径
[WITH DBPROPERTIES (property_name=property_value, ...)]; //指定数据块属性
数据库在HDFS上的默认存储路径是/user/hive/warehouse/*.db
create database if not exists shive
comment 'study hive'
location '/shive'
with dbproperties('creator'='jred','date'='2019-04-05');
---查看数据库信息
hive (default)> desc database shive;
OK
db_name comment location owner_name owner_type parameters
shive study hive hdfs://hadoop11:9000/shive root USER
Time taken: 0.013 seconds, Fetched: 1 row(s)
---查看更详细信息
hive (default)> desc database extended shive;
OK
db_name comment location owner_name owner_type parameters
shive study hive hdfs://hadoop11:9000/shive root USER {date=2019-04-05, creator=jred}
Time taken: 0.011 seconds, Fetched: 1 row(s)
1.2 修改数据库
数据库的其他元数据信息都是不可更改的,只能修改描述信息,包括数据库名和数据库所在的目录位置。
alter database shive set dbproperties('creator'="hive")
1.3 删库--记得买机票
--空库可以直接删除,采用 if exists判断数据库是否存在
drop database if exists shive;
--数据库不为空,可以采用cascade命令,强制删除
drop database if exists shive cascade;
2.1 建表
•CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常
•EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)
•LIKE 允许用户复制现有的表结构,但是不复制数据
•COMMENT可以为表与字段增加描述
•PARTITIONED BY 指定分区
•ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
| SERDE serde_name [WITH SERDEPROPERTIES
(property_name=property_value, property_name=property_value, ...)]
用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,
用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。
•STORED AS
SEQUENCEFILE //序列化文件
| TEXTFILE //普通的文本文件格式
| RCFILE //行列存储相结合的文件
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname //自定义文件格式
如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE
•LOCATION指定表在HDFS的存储路径
2.2两种类型的表
- 外部表:删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。
- 管理表:默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive会(或多或少地)控制着数据的生命周期,删除一个管理表时,Hive也会删除这个表中数据.
修改表的属性值可以进行外部表与内部表的互换
tblproperties('EXTERNAL'='FALSE');
注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!
3.1 分区表(Hive中的分区就是分目录)
create external table student_ptn(id int, name string, sex string, age int,department string)
partitioned by (city string)
row format delimited fields terminated by ","
location "/hive/student_ptn";
--添加分区
alter table student_ptn add partition(city="beijing");
-- 删除分区
alter table student_ptn drop partition (city='beijing');
--删除多个分区
alter table student_ptn drop partition (city='beijing'),partition(city='shanghai');
--查看分区表有多少分区
show partitions student_ptn;
3.2 分桶表
create external table student_bck(id int, name string, sex string, age int,department string)
clustered by (id) sorted by (id asc, name desc) into 4 buckets
row format delimited fields terminated by ","
location "/hive/student_bck";