У меня есть таблица РСУБД с 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, поместив все значения в a List
(после получения всех значений из БД), а затем получая значения по этим конкретным индексам - {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
результат SQL-запроса для размера раздела = 2 должен быть {1,2},{3,4} ,{5,7},{9,11},{12,20},{30}
.