hive创建表格,简单创建及复杂创建(指定分隔符,存储格式、分区等)

1、hive表格简单创建
create table test(id int,name string,tel string)
然后show tables 就可以查看到已创建的表格了
2、指定分隔符存储格式
create table test(id int, name string ,tel string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'LINES TERMINATED BY '\n'STORED AS TEXTFILE;
其中,FIELDS TERMINATED BY '\t' 是指定字段分隔符也可用用其他符号如“,”,“|”等等,LINES TERMINATED BY '\n'是指定行分隔符(一般不写,默认是换行符)
3、指定存储格式
create table test(id int, name string ,tel string)
STORED AS TEXTFILE;

上面语句就是创建文本格式的表格,一般如果集群的hdfs没有设置文件格式,hive表格默认的便是txt文本格式的,可通过命令
Hadoop fs -cat /表格目录/*   (*或者文件名)查看到文件的内容。hive表格也可以设置其他格式,STORED AS SEQUENCEFILE 设置为sqquencefile格式;STORED AS RCFILE 设置为rcfile格式;要根据需求不同设置不同的存储格式,而且每种存储格式的优势是不相同的,在此不讨论。
4、指定存储目录
create table test(id int,name string,tel string)  
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE 
LOCATION '/data/test'; 

上面语句中LOCATION '/data/test' 便是指定了表格在hdfs存储的目录,建表完成可在/data/下看到已创建test目录,指定目录一般在大型集群上比较常用的,因为集群的规模越大,使用者就越多,集群管理者便会对用户做权限管理,权限管理中必定会涉及对hdfs的目录进行管理,这个时候用户可能没有默认warehouse目录的权限了,建表便需要指定表格目录了

5、指定分区
create table test(id int, name string ,tel string) 
partitioned by (age int) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE

partitioned by (age int)语句便是指定age字段为分区字段

create table test(id int, name string ,tel string) 
partitioned by (age int,class string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE

上面语句指定了age,class两个分区字段,分区其实对应hdfs上的目录结构,如有一个age分区,表格的数据便存储在“表格目录/age”中,两个分区age,class,表格数据便存储在“表格目录/age/class”中;合理的分区在数据量大的表中是必要的,一本可以优化表格数据的查询速度,可可以对数进行简单的分类,一般大数据量的表中必有时间字段的分区

6、建立外部表
create EXTERNAL table test(id int, name string ,tel string) 
partitioned by (age int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;

外部表其实跟内部表格没有太大的区别,多了EXTERNAL关键字,外部表可以映射到其他目录,alter table test add partition (age=17) location '/user/oi/ts/17'; 这样便把ts目录下的数据映射到了test表中,可以查到数据select * from test where test=17; 当然前提是外部目录下的数据格式要与表格的格式一直,如上,17目录下的数据必须是三个字段的,且是逗号分割的,文本文件;外部表格在删除表格的时候,并不会删除数据,外部表格可以建立在已存在的目录或文件上,更加灵活
7、建立桶表 bucket table

create table test(id int,name string)
CLUSTERED BY(id) SORTED BY(name) INTO 32 BUCKETS    
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
桶是更为细粒度的数据范围划分,它能使一些特定的查询效率更高,
比如对于具有相同的桶划分并且jion的列刚好就是在桶里的连接查询,还有就是示例数据,
对于一个庞大的数据集我们经常需要拿出来一小部分作为样例,然后在样例上验证我们的查询,优化我们的程序。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值