sorting - 排序如何在 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
;
解决方案
推荐阅读
- model - 如何在 Visio 形状数据中显示多行文本?
- ios - 防止 UIButton showsTouchWhenHighlighted 更改 VoiceOver 描述
- pdf - 通过 Apps 脚本将工作表导出为 PDF(现在有些变化不再可搜索且文件大小更大)
- r - 关于 R 中的因子,levels() 与 labels() 有何不同?
- php - 为什么 www-data 需要执行权限才能将上传的文件写入目录?
- python - 修改 Dash Plotly 下拉菜单以操作多个绘图
- django - 如何将数据从 csv 文件导入到默认的 Django 用户模型?
- generics - 如何将实体或 DbSet 作为参数传递?
- amazon-s3 - 使用 s3 连接和 s3 钩子在 Airflow 上创建 boto3 s3 客户端
- java - Domino 子表单未将字段值传递给 JAVA 代理