четверг, 24 сентября 2015 г.

Параллельная экстракция

Дано: Экстра тор на FM, без дельты - т.с. ежедневный пакет счастья. Внутри него другой FM который последовательно вызывается по материалам. Время загрузки ~ 7 часов и растет.

Идея: Используя параллельный запуск FM внутри, ускорить выборку данных.

        CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API'
          STARTING NEW TASK taskname
          DESTINATION IN GROUP DEFAULT
          PERFORMING check_return ON END OF TASK

Результат.. Мимо. Оказалось что при таком вызове, курсор открытый в экстракторе, закрывается, ибо происходит COMMIT WORK. Соответственно, получаем дамп.
Да можно без курсора, но тогда не слишком красиво получается.

1 комментарий:

I комментирует...

А попробуй распараллелить двумя способами:

1. Через инфо-пакеты с разными ограничениями, запускать в параллель.

2. Сам Open Cursor. Инфа из хелпа для FETCH (делать так не пробовал)
Example

Reading of data from the database table SPFLI in packets of varying size using two parallel cursors. The packet size is determined by the first cursor using the aggregation functioncount( * ) and using the second cursor for access. Variable control of the addition PACKAGE SIZE is not possible within a single SELECT statement.

DATA: BEGIN OF count_line,
carrid TYPE spfli-carrid,
count TYPE i,
END OF count_line,
spfli_tab TYPE TABLE OF spfli.

DATA: dbcur1 TYPE cursor,
dbcur2 TYPE cursor.

OPEN CURSOR dbcur1 FOR
SELECT carrid count(*) AS count
FROM spfli
GROUP BY carrid
ORDER BY carrid.

OPEN CURSOR dbcur2 FOR
SELECT *
FROM spfli
ORDER BY carrid.

DO.
FETCH NEXT CURSOR dbcur1 INTO count_line.
IF sy-subrc <> 0.
EXIT.
ENDIF.
FETCH NEXT CURSOR dbcur2
INTO TABLE spfli_tab PACKAGE SIZE count_line-count.
ENDDO.

CLOSE CURSOR: dbcur1,
dbcur2.