Мельница данных  (01.11.2024)
Функция partitions

Функция partitions позволяет получить информацию о количестве объектов, возвращаемых запросом с разбиением на группы определенного размера, по каждой группе получить минимальный и максимальный идентификатор объектов и количество объектов в группе.

Допустимое расширение: .xml.

Функция имеет параметр query, значением которого должен быть.xml-документ, содержащий информацию о запросе к данным, который должен быть выполнен, и о размере групп, на которые должен быть разделен результат. Структура xml-документа должна повторять структуру, используемую при вызове функции cursor (см. Функция cursor) со следующими отличиями:

  1. Элемент query, в дополнение к обязательному атрибуту class, должен иметь еще один обязательный атрибут chunksize - размер группы (целое число - количество записей в группе).
  2. Узлы item со значениями атрибута part, равными what, можно не добавлять, в запросе всегда будет использоваться только идентификатор объекта (свойство ID).
  3. Узлы item со значениями атрибута part, равными order, group, having использоваться не должны. При выполнении запроса группировка применяться не будет, а сортировка всегда будет выполняться по идентификаторам объектов (свойство ID) по убыванию.
  4. Результат, возвращаемый функцией, всегда будет возвращен полностью, независимого от переданного значения атрибута fetchall.

В качестве результата функция вернет XML-документ с элементом data с атрибутом eof="1", имеющий дочерние узлы row, соответствующие каждой полученной группе. Каждый узел row будет иметь следующий набор дочерних узлов:

  • min - минимальный ID в группе объектов;
  • max - максимальный ID в группе объектов;
  • count - количество объектов в группе; во всех узлах row, кроме последнего значение count будет равно значению атрибута chunksize, переданному в запросе.
Узлы row будут отсортированы по убыванию значений ID объектов.

Пример
Пример запроса:
1  https://techmill.ru/demo/partitions.xml?query=
2    <query class="TPerson" chunksize="1000">
3      <item part="0" name="ID"/>
4      <item part="1" name="TaxID" value="*"/>
5    </query>
    
Пример ответа:
01  <data eof="1">
02    <row>
03      <Min type="int64">76211</Min>
04      <Max type="int64">1158488</Max>
05      <Count type="int">1000</Count>
06    </row>
07    <row>
08      <Min type="int64">1158489</Min>
09      <Max type="int64">2112571</Max>
10      <Count type="int">1000</Count>
11    </row>
12    <row>
13      <Min type="int64">2112572</Min>
14      <Max type="int64">6605306</Max>
15      <Count type="int">1000</Count>
16    </row>
17    <row>
18      <Min type="int64">6605312</Min>
19      <Max type="int64">8424606</Max>
20      <Count type="int">1000</Count>
21    </row>
22    <row>
23      <Min type="int64">8424612</Min>
24      <Max type="int64">739895343</Max>
25      <Count type="int">1000</Count>
26    </row>
27    <row>
28      <Min type="int64">739895363</Min>
29      <Max type="int64">742336003</Max>
30      <Count type="int">121</Count>
31    </row>
32  </data>