【发布时间】:2016-10-14 09:56:01
【问题描述】:
我有一个 RDBMS 表,其列 BIGINT 类型和值不是连续的。我有一个 java 程序,我希望每个线程都按照PARTITION_SIZE 获取数据,即我想要一对列值,例如在对结果执行ORDER BY 之后,
Column_Value at Row 0 , Column_Value at Row `PARTITION_SIZE`
Column_Value at Row `PARTITION_SIZE+1` , Column_Value at Row `2*PARTITION_SIZE`
Column_Value at Row `2*PARTITION_SIZE+1` , Column_Value at Row `3*PARTITION_SIZE`
最终,我将在 SELECT 查询的 BETWEEN 子句中传递上述值范围,以获取每个线程的划分数据。
目前,我可以通过 Java 进行此分区,方法是将所有值放入 List(在从 DB 获取所有值之后),然后在这些特定索引处获取值 - {0,PARTITION_SIZE},{PARTITION_SIZE+1,2*PARTITION_SIZE} ..etc 但存在问题List 可能有数百万条记录,不建议存储在内存中。
所以我想知道是否可以使用 SQL 本身编写这样的查询,它会返回如下的范围?
row-1 -> minId , maxId
row-2 -> minId , maxId
....
数据库是 DB2。
例如,
对于表列值 1,2,12,3,4,5,20,30,7,9,11 ,partition size =2 的 SQL 查询结果应该是 {1,2},{3,4} ,{5,7},{9,11},{12,20},{30} 。
【问题讨论】:
-
您的问题是否正确 - 您想使用多个线程从 DB2 中并行检索数据。你问如何选择行来获得不相交的 SELECT?
-
感谢您的调查。我在问题中添加了一个示例,是的,我认为您理解正确。
-
我添加的示例对于最后一组只有一个值,我将在程序中处理这种情况,因为没有最终值。