我正试图使用以下命令在hive中创建一个bucket:
hive> create table emp( id int, name string, country string)
clustered by( country)
row format delimited
fields terminated by ','
stored as textfile ;
命令执行成功:当我将数据加载到此表中时,它执行成功,并且使用select * from emp
时显示所有数据。
然而,在HDFS上,它只创建了一个表,并且只有一个文件包含所有数据。也就是说,没有特定国家记录的文件夹。
首先,在DDL语句中,您必须明确地提到您想要多少bucket。
create table emp( id int, name string, country string)
clustered by( country)
INTO 2 BUCKETS
row format delimited
fields terminated by ','
stored as textfile ;
在上面的陈述中,我提到了两个桶,同样,你可以提到任何你想要的数字。
你还没做完!!
之后,在将数据加载到表中的同时,您还必须提到下面对hive的提示。
set hive.enforce.bucketing = true;
这样就可以了。
之后,您应该能够看到在表目录下创建的文件数量与DDL语句中提到的bucket数量相同。
Bucketing不会创建HDFS文件夹,相反,如果你想为一个国家创建一个单独的floder,那么你应该PARTITION。
请详细介绍蜂箱分区和装箱。