0

我正在尝试使用以下命令在配置单元中创建一个存储桶:

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 上,它只创建一个表,并且只有一个包含所有数据的文件。也就是说,没有特定国家/地区记录的文件夹。

4

1 回答 1

1

首先,在 DDL 语句中你必须明确提到你想要多少个桶。

create table emp( id int, name string, country string)
 clustered by( country)
INTO 2 BUCKETS
row format delimited
fields terminated by ','
stored as textfile ;

在上面的陈述中我提到了 2 个桶,同样你可以提到任何你想要的数字。

你还没有完成!

之后,在将数据加载到表中时,您还必须提及以下提示来配置单元。

set hive.enforce.bucketing = true;  

那应该这样做。

之后你应该可以看到在表目录下创建的文件数与 DDL 语句中提到的桶数相同。

Bucketing 不会创建 HDFS 文件夹,如果您想为一个国家/地区创建一个单独的文件夹,那么您应该 PARTITION。

请详细了解 Hive 分区和分桶。

于 2015-04-06T07:10:07.127 回答