Hive 分区详解

在Hive中处理数据时,当处理的一张表的数据量过大的时候,每次查询都是遍历整张表,显然对于计算机来说,是负担比较重的。所以我们可不可以针对数据进行分类,查询时只遍历该分类中的数据,这样就能有效的解决问题。所以就会Hive在表的架构下,就会有分区的这个概念,就是为了满足此需求。

分区表的一个分区对应hdfs上的一个目录
分区表包括静态分区表和动态分区表,根据分区会不会自动创建来区分

多级分区表,即创建的时候指定 PARTITIONED BY (event_month string,loc string),根据顺序,级联创建 event_month=XXX/loc=XXX目录,其他和一级的分区表是一样的

1.静态分区

创建分区表
hive (default)> create table order_partiton(
              > order_no string,
              > order_time string
              > )
              > PARTITIONED BY (event_month string)
              > row format delimited fields terminated by '\t';
OK
Time taken: 0.052 seconds
加载数据到HIVE表
hive (default)> load data local inpath '/home/hadoop/order_created.txt' into table order_partiton PARTITION (event_month='2014-05');
Loading data to table default.order_partiton partition (event_month=2014-05)
Partition default.order_partiton{event_month=2014-05} stats: [numFiles=1, numRows=0, totalSize=213, rawDataSize=0]
OK
Time taken: 0.347 seconds

根据分区查找数据

hive (default)> select * from order_partiton where event_month='2014-05';
OK
order_partiton.order_no    order_partiton.order_time   order_partiton.event_month
10703007267488    2014-05-01 06:01:12.334+01  2014-05
10101043505096    2014-05-01 07:28:12.342+01  2014-05
10103043509747    2014-05-01 07:50:12.33+01   2014-05
10103043501575    2014-05-01 09:27:12.33+01   2014-05
10104043514061    2014-05-01 09:03:12.324+01  2014-05
Time taken: 0.163 seconds, Fetched: 5 row(s)

真正的表的字段是不包含分区字段的,分区字段只是HDFS上的文件夹的名称

在生产上,一般:数据经过清洗后存放在HDFS目录上,然后将目录的数据加载到分区表中
一般都会导致元数据缺失,需要修复相应的表,或者另外的命令:ALTER TABLE table_name ADD IF NOT EXIS

你可能感兴趣的:(分区表,hadoop,大数据,hive,spark)