- 创建库
- create database[if not exists] 库名
- [comment database_comment] (备注)
- [location hdfs_path] (HDFS上存放的路径)
- [with dbproperties (property_name = property_value,...)] (属性信息);
- 创建一个数据库,指定数据库在HDFS上存放的位置
- create database 库名 location '/库名.db' with dbproperties ('name'='aaa');
- 查询库
- show databases;
- 过滤显示查询的数据库
- show databases like ' ' ;
- 显示数据库信息
- desc database 库名;
- 显示数据库详细信息
- desc database extended 库名;
- 切换当前数据库
- use 库名;
- 修改库
- 数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置
- alter database 库名 set dbproperties ('属性名'='属性值');
- 删除空数据库
- drop database 库名;
- 判断要删除的数据库是否存在
- drop database if exists 库名;
- 强制删除数据库
- drop database 库名 cascade;
- 创建表
- create [external] table [if not exists] 表名
- external 关键字可以让用户创建一个外部表,在建表的同时可以指定一个执行实际数据的路径,在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据
- (a int,…)为表添加字段
- [(col_name data_type) [comment col_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] (sorted by:在每个桶中,数据按哪个字段排序;into ... buckets:将数据分为几桶)
- [row format row_format] (规定数据分隔符)
- [stored as file_format] (指定数据文件在hdfs中存放的格式,默认是textfile格式)
- [location hdfs_path] (指定表在HDFS上的存储位置)
- [tblproperties (property_name=property_value, ...)] (设置表的一些属性信息)
- [as select_statement] (as 后跟查询语句,根据查询结果创建表)
- like允许用户复制现有的表结构,但是不复制数据。
- 查询表: show tables;
- 查询表的类型:desc formatted 表名;
- 查看表结构:desc 表名;
- 删除表
- drop table 表名;
- 表的重命名:alter table 表名 rename to 新表名;
- 分区的修改
- 增加分区 alter table add partition(分区字段名=分区字段值);
- 同时增加多个分区 alter table add partition(分区字段名=分区字段值) partition(分区字段名=分区字段值);
- 删除分区 alter table drop partition(分区字段名=分区字段值);
- 同时删除多个分区 alter table drop partition(分区字段名=分区字段值),partition(分区字段名=分区字段值);
- 更新列:alter table 表名 change[column] col_old_name col_new_name column_type [comment col_comment] [first|after column_name]
- 增加和替换列:alter table table_name add|replace columns (col_name data_type [comment col_comment], ...) ;
- 内部表和外部表的互相转换:
- 表有个EXTERNAL属性,为true的时候是外部表,改为false变为内部表
- 内部表转为外部表:alter table 表名 set tblproperties('EXTERNAL' = 'true');
- 外部表转为内部表:alter table 表名 set tblproperties('EXTERNAL' = 'false');
- 数据:
- (增) 向表中添加数据:load装载:load data [local] inpath '文件路径' [overwrite] into table 表名 [partition(分区字段名=分区字段值)];
- insert into/overwrite 方式:
- 基本插入:insert into table 表名 values(列值1,列值2,列值3),(列值1,列值2,列值3);
- insert overwrite table 表名 values(列值1,列值2,列值3);
- 基本模式插入(根据从另一张表的查询结果插入):
- insert into table 表名 select id,name from 另一表名;
- 多表/多分区联合插入:从一个表中查询一部分数据放入另一个表/分区,查询另一部分数据放入再一个表/分区内
- from 表名1
- insert into 表名2
- select id,name where id%2=0
- insert into 表名3
- select id,name where id%2=1;
- 根据查询结果建表并加载数据:
- create table 表名 as select friends,children from 表名;
- 建表时,通过location关键字指定数据在hdfs上的路径(目录)
- create table 表名 (列名 列类型,列名 列类型,...) location 'hdfs上路径';
- 使用import命令,将export导出的结果导入到表中(要求表是空表)
- import table 表名 from 'hdfs上export导出的结果目录';
- (删) truncate table 表名; 清除表中数据
- delete table 表名 where …
- (查) select * from 表名; 全表查询
- select 列名1,列名2,... from 表名; 选择特定列查询
- select * from 表名 limit 5; 限制查询的行数
- select * from 表名 where sal >1000; 查询符合where条件的语句
- select * from 表名 group by 列名 order by 列名 分组排序查询
- select e.empno, e.ename, d.deptno, d.dname from 表1 e join 表2 d on e.deptno = d.deptno; 连接表查询 、 left join 左外连接 right join 右外连接 满连接 full join 还可以两个join多表连接查询
- select * from 表名 distribute by 列名 sort by 列名 desc; mapreduce内部排序需设定reduces的数量 分区排序
- select * from stu_buck tablesample(bucket x out of y on id); 分桶抽样查询
- select name, concat(constellation, ",", 列名) from 表名 group by 列名 行转列查询
- select 列名,列别名 from 表名 lateral view explode(列名)表别名 as 列别名; 列转行查询 列是个集合列
- select 列名1,rank() over(partition by 列名2 order by 列名3 desc rows unbounded preceding and unbounded following) 列别名 from 表名; 开窗函数查询