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

HIVE: Empty buckets getting created after partitioning in HDFS

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

用于设置一些属性:

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

下面是创建 table 的代码:

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;

下面是将数据插入 table 的代码:

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

出了什么问题:

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

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

当使用 bucketing 时,Hive 会产生一个按值聚类的散列(这里你使用 id)并将 table 拆分成分区内的许多平面文件。

因为 table 由 id 的散列拆分,每个拆分的大小基于您的 table 中的值。

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