建表
基本语句格式
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路径,且该路径与数据的原路径保持一致,
否则