HIVE sql:千亿级数据,两个字段u_id,price,取price前十;以及如何优化;(拓展到range分区及动态分区)

分析:

典型的 Top k 问题么
把价格转成 int,然后按梯度分区,top N 肯定在最大分区里,如果再说的 NB 点,可以说按梯度分区按价格分桶,查询更快
首先我不知道你的价格区间有多大,区间越大分区越多,分而治之的思路,大数据量搞 top n 或其他的,
解决办法都是分而治之,如果你不知道具体实施方案,就想方设法往分而治之的思路上扯,大数据所有的优化方向都是分而治之。

拓展示例:

如何使用列的值范围对Hive表进行分区

Employee ID Salary
1   10000.08
2   20078.67
3   20056.45
4   30000.76
5   10045.14
6   43567.76

  

例如工资范围为 10000 到 20000、20001 到 30000 的分区。

创建按salary_range分区(动态分区)的表:

create table your_table
(
 employee_id bigint,
 salary double
)
partitioned by (salary_range bigint)


插入用于工资范围计算的用例:
insert overwrite table your_table partition (salary_range)   
select employee_id, salary,  
       case 
           when salary between 10000 and 20000 then 20000
           when salary between 20001 and 30000 then 30000 
           ...
           else ...
       end as salary_range 
from some_table;

  

参考:

https://stackoverflow.com/questions/45398092/how-to-partition-a-hive-table-using-range-of-values-for-a-column#:~:text=Hive%20does%20not%20support%20range,calculate%20ranges%20during%20data%20load.

原文地址:https://www.cnblogs.com/-courage/p/14850784.html