首页 > 解决方案 > 排序如何在 Hive 中的分区倾斜数据集上工作

问题描述

我在 Hive 中有一个具有以下层次结构的数据集,数据集的大小以 TB 为单位。

-Country
   -Year
   -In_stock
   -Zone
      -trans_dt

我需要在区域内按升序对 trans_dt 进行排序(其中一个区域贡献了 80% 的数据集),这是对该数据集进行排序的最有效方法。我总共有 10 个国家,每个国家都有大约 100 个区域。对 trans_dt 进行排序后,我需要对 collect_sets 执行操作,因此在我的情况下排序非常重要。

我尝试按 Year 对数据集进行分区,然后在 trans_dt desc 上应用 Cluster by,但似乎排序没有按预期工作。

CREATE TABLE TEST.TABLENAME STORED AS ORC AS
(
COUNTRY INT,
YEAR STRING,
In_stock INT,
ZONE STRING,
TRANS_DT STRING,
|
|
MORE COLUMNS
)
FROM SOURCETABLE PARTITION BY (YEAR,IN_STOCK)

INSERT OVERWRITE TABLE TEST.TABLENAME PARTITION(YEAR, IN_STOCK)
SELECT
|
|
FROM SOURCETABLE CLUSTER BY trans_dt;



SELECT
a.country,
a.zone,
collect_set(a.prod_id) AS prod_seq
count(*) as count
FROM SOURCETABLE WHERE IN_STCK=1
GROUP BY
a.country,
a.zone
;

标签: sortinghadoophivemapreduceskew

解决方案


推荐阅读