create external table if not exists t2 (id int) partitioned by (city string) row format delimited fields terminated by ‘,’ location ‘/tmp/xxq/t2/’
这里的location为 HDFS上的目录,目录不存在,创建外部表时会自动创建该目录
某张表是分区表。每个分区的定义,就表现为了这张表的数据存储目录下的一个子目录。分区表。数据文件一定要存储在某个分区中,而不能直接存储在表中。
partition by 中的列是表中正式的列,称为分区列。但是数据文件并不包含这些列的值,因为他们源于目录名
对数据进行分区,最重要的原因是为了更快的查询
在where子句中增加谓词按照分区值进行过滤时,这些谓词被称为分区过滤器
如果表中的数据及分区个数很大,这些包含所有分区的查询可能会触发一个巨大的MapReduce任务。一个建议是将hive属性 hive.mapred.mode设置为strict 模式,这样如果对分区表进行查询where子句没有加分区过滤的话,将会禁止这个任务
1
、添加分区
alter table t2 add partition(city=‘beijing’);