我正在尝试为分布式处理系统构建查询分区器。该系统可以与支持 JDBC 的数据库一起使用。
此分区器的输入将是表的名称和用于分区的列。让我们假设此列上有一个索引。例如:
Table: customers
Partitioning column: customer_id
从那里,我将构建以下查询:
select * from customers where customer_id >= ? and customer_id < ?
然后,我想将域划分customer_id
为 10 个大小大致相同的范围。我想发出一个快速查询来解决这个问题。
我percentile_cont
在 ANSI SQL 中找到了这个函数(很好,因为很多数据库都支持这个)——我写了这个查询,它似乎有效:
SELECT
percentile_cont(customer_id, 0) over(),
percentile_cont(customer_id, 0.1) over(),
percentile_cont(customer_id, 0.2) over(),
percentile_cont(customer_id, 0.3) over(),
percentile_cont(customer_id, 0.4) over(),
percentile_cont(customer_id, 0.5) over(),
percentile_cont(customer_id, 0.6) over(),
percentile_cont(customer_id, 0.7) over(),
percentile_cont(customer_id, 0.8) over(),
percentile_cont(customer_id, 0.9) over(),
percentile_cont(customer_id, 1) over()
FROM customers LIMIT 1
我的问题是:
- 如果该列
customer_id
被索引 - 此查询是否会相当快地快速生成范围,然后使用它们来并行化 10 个查询? - 有没有其他方法可以使用分区列为给定表找到类似大小的范围?