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命令获取对应路径的数据导出

posted @ 2020-05-17 22:15  Q1Zhen  阅读(129)  评论(0编辑  收藏  举报