Hive关于数据表的增删改(内部表、外部表、分区表、分桶表 & 数据类型、分隔符类型)

建表

基本语句格式

CREATE [external] TABLE if not exists student #默认建立内部表,加上external则是建立外部表

(id int COMMENT'学号',sname string COMMENT'用户名',age int COMMENT'年龄')#字段名称,字段类型,字段描述信息 COMMENT '记录学生学号'#表的描述信息

PARTITION BY (department string COMMENT'根据部门分区')#设定分区的字段名称,此字段为全新字段,不得是表中任意字段;

clustered BY (id,age)#指定分桶的字段,此字段必须来自表中字段;

sorted BY (id ASC, age DESC)#指定一个桶内的排序规则(按照id升序,按照年龄降序);

INTO 9 buckets #指定桶的个数为9

ROW FORMAT delimited fields terminated BY '\t' #指定逗号为列分隔符

collection items terminated by ',' #集合中的元素间的分隔符

map keys terminated by ':' #元素内部的分隔符

lines terminated BY '\n'#指定换行符为行分隔符

stored AS textfile #指定最终表数据的存储格式,默认是textfile,还可以是rcfile(行列结合的格式)/parquet(压缩格式)

location '/user/student' #指定hive上表在hdfs上的存储路径,默认的是配置路径下

 

1.内部表

CREATE TABLE if not exists student(id int ,sname string ,age int) 
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n';

 

2.外部表

CREATE external TABLE if not exists student(id int ,sname string ,age int) 
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n' 
location '/user/student';

注意:

建外部表之后,若是从HDFS上加载数据的话(本质上是移动数据),会将数据从原路径移动到建表的路径下,

若两者路径不一致,则会导致其他部门的代码无法获取到数据,

因此,建立外部表的时候一定要location路径,且该路径与数据的原路径保持一致,

否则࿰

你可能感兴趣的:(Hive,hive,数据分析)