当前位置:   article > 正文

HIVE SQL DDL&DML语句实例_hive建表语句案例

hive建表语句案例

创建新表(三种方式)

1.直接建表

drop table if exists student_score;
create table if not exists student_score(
	id string comment '记录id'
	,student_id string comment '学生学号'
	,subject_id string comment '科目id'
	,score string comment '成绩'
 )
partitioned by (university_name string comment '大学名称')--指定university_name字段作为分区字段
row format delimited fields terminated by '\u0001' --指定列分隔符
lines terminated by '\n'--指定行分隔符,hive默认使用\n作为行分隔符,所以此段可以不加
stored as parquet--指定hive文件的存储格式
location '存放地址'--指定存放地址
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

其中关于Hive的三种不同的文件存储格式可参考这篇文章https://blog.csdn.net/chenfeng_sky/article/details/107361081

2.create table as (直接使用查询结果插入到一张新表)

drop table if exists student_score_new;
create table student_score_new as 
(
select 
*
from student_score
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过执行show create table student_score_new,可以发现student_score_new并没有将student_score的分隔符、存储格式、分区字段、字段comment等表结构信息复制过来,只是复制了查询的字段和字段对应的值。

3.like (复制表结构)

create table student_score_structure_copy
like
student_score
  • 1
  • 2
  • 3

student_score_structure_copy只是将student_score的表结构信息复制过来,但是没有复制student_score表的记录。所以student_score_structure_copy是一个空表。

向表中加载数据(三种方式)

1)直接向分区表中插入数据

--追加
insert into table student_score partition (university_name='hku')
values
('10000','20231123','math','a')
;
--覆盖
insert overwrite table student_score partition (university_name='hku')
values
('10000','20231123','math','a')
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2)通过load方式加载数据

--追加
load data local inpath 'test_path/student_score.csv' into table student_score partition (university_name='hku');
--覆盖
load data local inpath 'test_path/student_score.csv' into table student_score partition (university_name='hku');
  • 1
  • 2
  • 3
  • 4

3)通过查询方式加载数据

--追加
insert into table student_score partition (university_name='hku') 
select id,student_id,subject_id,score
from student_score_backup
;
--覆盖
insert overwrite table student_score partition (university_name='hku') 
select id,student_id,subject_id,score
from student_score_backup
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

更改表名

alter table old_table_name rename to new_table_name;
  • 1

更改字段

#将指定列数据类型更改为string
alter table table_name
change column_name_old column_name_new string comment '更改字段';
  • 1
  • 2
  • 3

新增字段

alter table table_name add columns(new_column_name string comment '新增字段');
  • 1

删除分区

alter table table_name drop partition(dt='2023-11-23');
  • 1

添加分区

--单分区
alter table table_name add partition(dt='2023-11-23');
--多份分区
alter table table_name add partition(dt='2023-11-23') partition(university= 'hku');
  • 1
  • 2
  • 3
  • 4
--添加后可查看分区信息
show partitions table_name;
  • 1
  • 2

清空表数据

1)保留数据结构

 truncate table table_name;
  • 1

2)不保留数据结构

 drop table table_name;
  • 1

注意:truncate 和 drop:
如果 hdfs 开启了回收站,drop 删除的表数据是可以从回收站恢复的,表结构恢复不了,需要自己重新创建;truncate 清空的表是不进回收站的,所以无法恢复truncate清空的表
所以 truncate 一定慎用,一旦清空将无力回天

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/969596
推荐阅读
相关标签
  

闽ICP备14008679号