我正在尝试使用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中创建的,但数据仅存在于所有分区的第一个存储桶中;剩下的所有桶都是空的。
请让我知道我做错了什么以及如何解决这个问题。
答案 0 :(得分:1)
使用bucketing时,Hive会提供一个按值聚簇的哈希值(这里你使用id)并将表拆分成分区内的许多平面文件。
由于表格被ID的哈希值拆分,因此每个拆分的大小都基于表格中的值。
如果没有可以映射到第一个存储桶以外的存储区的值,则所有这些平面文件都将为空。