При подготовке к пакетному процессу мне нужно разбить группы записей для запуска параллельных потоков задания. Эти записи поступают из таблицы, в которой потенциально могут быть миллионы строк. Моя цель - равномерно разбить эти записи (по первичному ключу) на (приблизительно) даже куски, которые затем могут обрабатываться параллельно. Я хочу динамически выбирать размер куска. Также можно отметить, что могут быть пробелы в последовательности первичных ключей.Результирующий набор разделов SQL в куски
Другими словами, учитывая эту таблицу, с предикатом, обозначающим количество блоков и набора результатов предоставления первой и последней последовательности фрагмента:
seq name |
-------|--------|
1 | john |
2 | joe |
3 | joe |
4 | joe |
5 | joe |
567 | kent |
568 | katie |
20000 | sue |
200016 | jill |
200027 | bill |
Я хотел бы получить обратно следующие результаты, где (число-кусках) -> (первый, последний SEQ-сл):
(2) -> (1,5),(567,20027)
(5) -> (1,2),(3,4),(5,567),(568,20000),(200016,200027)
Или, как набор результатов, что-то вроде этого (когда просят 5 порций):
first_seq last_seq -----------|----------| 1 | 2 | 3 | 4 | 5 | 567 | 568 | 200000 | 20016 | 200027 |
Я предполагаю, что какая-то функция окна здесь в порядке, но я не знаю, как это решить. Может ли кто-нибудь помочь мне с запросом?
функция
вы можете добавить ожидаемый результат в виде таблицы –
, что вы звоните «chunk- размер ", по-видимому, является количеством кусков, которые вы хотите, верно? (Обычно я читал «размер блока» как количество элементов, которые должны появляться в каждом фрагменте.) –
Будет ли это использоваться с SQLServer или MySQL? –