gpt4 book ai didi

java - 是否可以使用SQL获取分区数据?

转载 作者:行者123 更新时间:2023-12-02 03:17:53 25 4
gpt4 key购买 nike

我有一个 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 中来完成此分区。 (从数据库获取所有值之后)然后获取这些特定索引处的值 - {0,PARTITION_SIZE},{PARTITION_SIZE+1,2*PARTITION_SIZE} ..等等,但问题是 List可能有数百万条记录,不建议存储在内存中。

所以我想知道是否可以使用 SQL 本身编写这样一个查询,它会返回如下所示的范围?

row-1 -> minId , maxId

row-2 -> minId , maxId

....

数据库是DB2。

例如,

对于表列值 1,2,12,3,4,5,20,30,7,9,11分区大小=2的 SQL 查询结果应为 {1,2},{3,4} ,{5,7},{9,11},{12,20},{30}

最佳答案

在我看来,mod() 函数可以解决您的问题,您可以使用它选择动态数量的分区。

WITH numbered_rows_temp as ( 
SELECT rownumber() over () as rownum,
col1,
...
coln
FROM table
ORDER BY col1)

SELECT * FROM numbered_rows_temp
WHERE mod(rownum, <numberofpartitions>) = 0

填写适当的内容并将查询中的结果从 0 更改为 - 1。

关于java - 是否可以使用SQL获取分区数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40040269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com