本文章向大家介绍HIVE sql:1400亿数据,两个字段u_id,price,取price前十;以及如何优化;(拓展到range分区及动态分区),主要包括HIVE sql:1400亿数据,两个字段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;
参考:
hiveql - How to partition a Hive Table using range of values for a column - Stack Overflow