分析:
典型的 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;
参考: