DDL、DML基础
DDL
1.创建数据库,为了避免数据库已存在,加上if not exists
判断,并且指定数据库在HDFS上存放的位置
create database if not exists XXX location '/XXX.db';
2.删除数据库,如果数据库不为空,可以采用cascade
强制删除
drop database if exists XXX cascade;
3.hive建表最好限定规则
create table stu2(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string,city:string>
)
row format delimited
fields terminated by '\t'
collection items terminated by '_' #数据分隔符
map keys terminated by ':'
lines terminated by '\n';
4.管理表
- 默认创建的表都是管理表,即内部表。管理表不适合和其他工具共享数据。
- 内部表->外部表
alter table x1 set tblproperties('EXTERNAL'='TRUE');
5.分区表
- 本质上就是分文件
```bash
create table xxx(
id int
)
partitioned by (time string)
row format delimited
fields terminated by '\t';
- 查看分区、分区结构
show partitions tablename;
desc formatted tablename;
- 增加分区
alter table xxx add partition(time=t1) partition(time=t2);
- 删除分区
alter table xxx drop partition(time=t1),partition(time=t2);
分区表注意事项
1.创建二级分区表
create table xxx(
id int
)
partitioned by (time string,id int)
row format delimited
fields terminated by '\t';
2.数据直接上传到hdfs对应目录后,修复元数据信息,否则用hql语句查询不到刚插入的数据。或者直接用load数据到分区文件夹,此时元数据信息一并更新就不必在更新了
msck repair table tablename;
或者
alter table xxx add partition(time=t3,id =0)#跟自己直接上传至hdfs的文件夹路径一致
DML
1.向表中添加数据(load)
2.插入数据(以分区表为例)
单张表
insert into(overwrite) table xxx partition(time=t1,id=0) values(1,"xiaoming");
多张表
from X1
insert overwrite table X1 partition(time='t1')
select id,name where time='t2'
insert overwrite table X1 partition(time='t3')
select id,name where time='t4'
3.创建表时添加数据,一般情况下都是以hdfs上的数据为基准,映射一张表
create table tablename(id int) location '/..../..'
4.insert导出数据
insert overwrite local directory '/../../..'
row format delimited fields terminated by '\t'
select * from xxx;
5.也可以用hadoop的-get命令获取对应路径的数据导出