HIVE:在HDFS中进行分区后创建空桶

时间:2015-10-15 03:09:52

标签: hadoop hive bigdata hadoop-partitioning

我正在尝试使用HIVE创建分区和存储桶。

用于设置某些属性:

set hive.enforce.bucketing = true;
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;

以下是创建表格的代码:

CREATE TABLE transactions_production
( id string,
dept string,
category string,
company string,
brand string,
date1 string,
productsize int,
productmeasure string,
purchasequantity int,
purchaseamount double)
PARTITIONED BY (chain string) clustered by(id) into 5 buckets
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

以下是将数据插入表中的代码:

INSERT OVERWRITE TABLE transactions_production PARTITION (chain)
select id, dept, category, company, brand, date1, productsize, productmeasure,
purchasequantity, purchaseamount, chain from transactions_staging;

出了什么问题:

分区和存储桶是在HDFS中创建的,但数据仅存在于所有分区的第一个存储桶中;剩下的所有桶都是空的。

请让我知道我做错了什么以及如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

使用bucketing时,Hive会提供一个按值聚簇的哈希值(这里你使用id)并将表拆分成分区内的许多平面文件。

由于表格被ID的哈希值拆分,因此每个拆分的大小都基于表格中的值。

如果没有可以映射到第一个存储桶以外的存储区的值,则所有这些平面文件都将为空。