hive对数据库及对表的操作

1.对库的操作

(1)创建库

create database t1;

show databases;

 

(2)创建库的时候带注释。

create database if not exists t2 comment 'learning hive';

(3)创建带属性的库。

create database if not exists t3 with dbproperties('creator'='hadoop','date'='2019-01-01');

(4)查看库。

show databases;

(5)查看库的详细属性。

 desc database 库名;

desc database extended 库名;

 

(6)查看正在使用的库。

select current_database();

 (7)删除库。

drop database if exists 库名 cascade;

默认情况下,hive 不允许删除包含表的数据库。需要使用cascade 关键字。

(8)切换库。

use 库名;

2.对表的操作

(1)内部表

表目录hive会自动创建在默认的HDFS目录下/user/hive/warehouse/…。

create table worker_1(id int,name string,salary bigint,addr string)

row format delimited

fields terminated by ',';

(2)外部表

创建的时候,需要使用external关键字,并指定表对应hdfs上的目录/aa/bb。

create external table worker_2(id int,name string,salary bigint,addr string)

row format delimited

fields terminated by ','

location '/worker';

drop一个内部表时,表的元信息和表数据目录都会被删除。

drop一个外部表时,只删除表的元信息,表的数据目录不会被删除。

外部表的意义

通常,一个数据仓库系统,数据总有一个源头,而源由一般是别的应用程序产生的,其目录无法确定,为了方便映射,就可以在hive中用外部表映射。并且,就算hive中把这个表删了,也不会删除数据目录,就不会影响到别的应用系统。

(3)导入。

load data local inpath '/opt/testData/hive/worker_1.txt' into table worker_1;

(4)覆盖导入。

load data local inpath '/opt/testData/hive/worker_1.txt' overwrite into table worker_1;

(5)将hdfs上的文件导入表中。

上传文件到HDFS。

load data inpath '/worker_2' into table worker_2;

(6)查看表信息。

desc 表名;

(7)查看表的详细信息。

desc extended student;

desc formatted student;

(8)查看表的详细建表语句。

show create table student;

(9)修改表名。

alter table student rename to new_student;

(10)修改字段。

增加一个字段:alter table new_student add columns (score int);

修改一个字段的定义:alter table new_student change name new_name string;

不支持删除字段。

(11)删除表。

drop table new_student;

(12)清空表。

truncate table student;

(13)建表

create table worker_4(id int,name string,salary bigint,addr string)

partitioned by (day string)

row format delimited

fields terminated by ',';

注意:分区的字段一定不能在定义的字段里。

(14)导入数据到分区

load data local inpath '/usr/datadir/worker_1.txt' into table worker_4 partition(day='01');

load data local inpath '/usr/datadir/worker_1.txt' into table worker_4 partition(day='02');

它会将day这个分区条件也当成了一个字段。

如果只查询worker_4下day=01目录下的信息,可以用:

select * from worker_4 where day=’01’;

(15)增删分区

查看分区信息。

show partitions worker_4;

增加分区:

alter table worker_4 add partition(day='03') partition(day='04');

通过加载数据实现添加分区:

load data local inpath '/usr/datadir/worker_3.txt' into table worker_4 partition(day='05');

新建表。

create table student(id int,name string,sex string,age int,department string)

row format delimited fields terminated by ",";

load data local inpath '/usr/datadir/student.txt' into table student;

把这一张表的内容直接插入到另一张表student_ptn_age中,并实现age为动态分区(不指定到底是哪种年龄,让系统自己分配决定)。

(16)创建分区表。

create table student_ptn_age(id int,name string,sex string,department string)

partitioned by (age int);

插入数据,实现动态分区。

动态分区需要设置set hive.exec.dynamic.partition.mode=nonstrict;不然会报错。

insert overwrite table student_ptn_age partition(age)

select id,name,sex,department,age from student;

查询的分区字段要写在最后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值