DDL数据库定义
- 创建数据库
1.创建一个数据库
create database db;
2.避免要创建的数据库已经存在
create database if not exists db;
3.创建数据库时,指定数据库在hdfs上存放的位置
create database db location '/user'
- 查询数据库
1.显示数据库
show databases;
2.过滤显示查询的数据库
show database like ‘db’;
3.显示数据库信息
desc database db;
- 切换当前数据库
use db;
- 删除数据库
1.删除空数据库
drop db;
2.如果数据库不为空,可以采用casecode命令,强制删除
drop database db casecode;
- 创建表
1.建表语法
create [external] table [if not exists] table_name
[(col_name data_type [comment col_comment],....)]
[comment table_comment]
[row format row_format]
[stored as file_format]
[location hdfs_path]
like tablename
2.字段解释说明
(1)external 关键字可以让用户创建一个外部表,在建表的同时指定一个指向一个实际的
路径(location)hive创建内部表时,会将数据移动到数据仓库指向的路径;如果创建外部
表,仅记录数据所在的路径,不会对数据的位置做任何的改变,在删表的时候,内部表的元数
据和数据会被一起删除,外部表只删除元数据,不会删除数据
(2)comment :为表和列添加注释
(3)row format delimited fields terminated by char
(4)stored as 指定存储文件类型
常用的存储文件类型:sequencefile(二进制序列文件)、textfile(文
本),rcfile(列式存储格式文件)如果文件数据是纯文本,可以使用
stored textfile 如果数据需要压缩 使用storesd as sequencefile
(6)location :指定表在hdfs上存储位置
(7)like 允许用户复制现有的表结构 但是不复制数据
eg:如果当前创建的表table1 希望table1和已经存在的tablle0的表结构相同,
就可以使用like指令直接创建 create table table1 like table0;
- 内部表
(1)创建普通表
create table if not exists user(
id int ,name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/....'
(2)根据查询结果创建表
create table if not exists user as select * from student;
(3)根据已经存在的表结构创建表
create table if not exists user like student;
(4)查询表的类型
desc formatted user;
- 外部表
1.概念
因为表时外部表,所以hive并非认为其完全拥有这份数据,删除该表并不会删除掉这份数据,不过
描述表的元数据信息会被删除掉
2.使用场景
外部表的基础上做大量的统计分析,用到的中间表,结果表使用内部表存储,数据通过
select+insert 进入内部表
3.创建外部表的方式
create external table if not exists user(
id int ;
name string
)
row format delimited fields terminated by '\t'
stored as textfile
location ''
4.向外部表中导入数据
load data local inpath '' into table user
- 修改表
1.重命名表
alter table A rename to b;
2.修改列
alter table A change cloumn old_clu new_clu cloumn_type
3.增加列
alter table A add cloumns(new_clu cloumn_type)
4.查询表结构
desc user;
- 删除表
drop table if exists user;
DML数据库操纵语言
- 向表中装载数据(load)
1.语法
load data [local] inpath '路径' [overwrite] into table student;
(1)load data: 表示加载数据
(2)local:表示从本地加载数据到hive表(复制)否则从HDFS 加载数据到hive表(移动)
(3)inpath:表示加载数据的路径
(4)overwrite into :表示覆盖表中已有的数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
2.加载本地文件到hive中
load data local inpath "" into table user;
3.加载HDFS文件到hive中
load data inpath '' into table user;
4.加载数据覆盖表中已有的数据
load data inpath '' overwrite into table user;
2.通过查询语句向表中插入数据(insert)
1.基本插入数据
insert into table student values(1,"zhangsan");
3.查询语句中创建表并加载数据(AS SELECT)
create table if not exists user
as select id,name form studnet;
4.创建表时通过Location指定加载数据路径
create table if not exists user(
id int,
name string
)
row format delimited fields terminated by '\t'
location 'user/hive/warehouse/user'
2.上传数据到hdfs上
hive (default)> dfs -put /opt/module/datas/student.txt
/user/hive/warehouse/student4;
3.查询数据
hive (default)> select * from student4;
5.Import数据到指定Hive表中
注意:先用export导出后,再将数据导入。
hive (default)> import table student8 from
'/user/hive/warehouse/export/student';
- 数据导出
1.Insert导出
1.将查询结果导出到本地
insert overwrite local directory '' select * from student
2.将结果格式化导出本地
insert overwrite local directory ''
row format delimited fields terminated by '\t'
select * from student;
3.将结果导出到hdfs上(将local去掉)
2.hadoop命令导出本地
fs -get local_path hdfs_path
3.hive shell 命令导出本地
hive -e "select * form student" > "/opt/stu.txt";
4.export 导出到hdfs上
export table default.student to '/user/hive/warehouse/export/student';
3.清除表中的数据
注意 truncate 只能删除管理表,不能删除外部表中的数据
truncate table user;