Текущее время: Пт, июн 20 2025, 16:47

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Start/End routine
СообщениеДобавлено: Ср, окт 01 2014, 15:35 
Специалист
Специалист

Зарегистрирован:
Пн, ноя 01 2010, 08:21
Сообщения: 162
Добрый день!
В глобальной области трансформации (DS >> DSO_1) описана таблица gt.
В start_routine она заполнилась через select into, объектами из некой DSO_2, для записей source_package (через for all entries по ключу).
В end_routine записи этой таблицы были использованы для определения полей.

Как будет вести себя такой алгоритм, если загрузка DSO_1 осуществляется пакетами параллельно, хотя бы и в два потока. Ведь может получится так, что второй пакет прогрузится быстрее и процедура end_routine для первого пакета, так и не увидит в ней "свои" данные, потому что они были перезаписаны start_routine второго пакета. Или же сгенерированная трансформация выполняется изолировано для каждого пакета в загрузке?


Каким образом лучше построить работу с чтением таблицы стороннего DSO в start_routine? При условии, что в этом DSO может храниться большое количество данных (например, из DS 2LIS_12_VCITM), полное ее чтение существенно осложнит работу.

В общем, требуется best practise по этой теме ибо я запутался :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Ср, окт 01 2014, 17:48 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
Все правильно делаете. Чтобы долго не писать... сгенерированная трансформация выполняется изолировано для каждого процесса. Вашу gt-таблицу (старайтесь, если это допустимо, объявлять ее как хэш-таблицу) заполняете заново для каждого пакета в start_routine. В таком случае вам не придется читать большое кол-во данных из стороннего DSO. Если же и в этом случае кол-во читаемых записей велико, то следует уменьшить размер пакета в DTP (если такая возможность есть).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Ср, окт 01 2014, 21:08 
Специалист
Специалист

Зарегистрирован:
Пн, ноя 01 2010, 08:21
Сообщения: 162
murmur написал:
изолировано для каждого процесса

Под процессом понимается загрузка одного пакета из PSA (по умолчанию 50К записей)?

Я попробовал поставить точку остановки в сгенерированной программе трансформации перед вызовом call method start_routine. Перед вызовом метода gt таблица была полна предыдущими значениями. Понятно, что внутри start_routine она переопределится.
Главное уяснить вопрос из первой части - изолированный процесс == загрузка конкретного пакета (одного из N)?

А как тогда определять глобальную переменную/таблицу и заполнять ее только один раз для всех пакетов? Или в таком случае, заполнение идет в первом пакете, а в каждом последующем проверка на initial этой таблицы?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Чт, окт 02 2014, 08:28 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
Цитата:
Под процессом понимается загрузка одного пакета из PSA (по умолчанию 50К записей)?
Под процессом понимается процесс, который вы видите в SM50. У вас может быть 10 пакетов. Если предположить, что распараллеливание идет по трем процессам более-менее равномерно, то возможен такой вариант распределения пакетов - 3, 3, 4. Для каждого процесса gt-таблица будет своя

Цитата:
А как тогда определять глобальную переменную/таблицу и заполнять ее только один раз для всех пакетов? Или в таком случае, заполнение идет в первом пакете, а в каждом последующем проверка на initial этой таблицы?
Если заполнение gt-таблицы у вас идет на основе данных самого пакета, то лучший вариант для каждого пакета заново заполнять gt-таблицу (можно, конечно, аппендить, чтобы избежать лишних селектов, но тогда придется контролировать размер gt-таблицы, чтобы она не съела все ресурсы). Если заполнение gt-таблицы не зависит от данных пакета, например, вы читаете всю таблицу атрибутов одного из признаков (относительно небольшую), то тогда проверять на initial.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Пт, окт 03 2014, 23:01 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 13 2005, 10:41
Сообщения: 558
Откуда: Гондурас (округ Москвы)
Пол: Мужской
сделайте expert routine, не насилуйте мозг.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Чт, окт 09 2014, 18:19 
Ассистент
Ассистент

Зарегистрирован:
Ср, апр 02 2014, 18:03
Сообщения: 43
expert routine не советую

>>А как тогда определять глобальную переменную/таблицу и заполнять ее только один раз для всех пакетов? Или в таком случае, заполнение идет в первом пакете, а в каждом >>последующем проверка на initial этой таблицы?

это по-моему тоже не самое лучшее решение

Попробуйте использовать semantic group в настройках ДТП.
С их помощью можно добиться того, что данные из источника будут разбиваться на группы, в зависимости от ключа, заданного в semantic group.
В этом случае обычно (не знаю вашего конкретного случая) можно реализовать зачитку из другого ДСО базируясь на этих ключах.
Например, если задать ключ, состоящий из одного признака, то САП гарантирует, что записи с одинаковым значением признака будут всегда приходить в одном пакете. Если задать ключ из нескольких признаков - то каждая комбинация из значений этих признаков будет приходить только в одном пакете ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Чт, окт 09 2014, 18:23 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 13 2005, 10:41
Сообщения: 558
Откуда: Гондурас (округ Москвы)
Пол: Мужской
мне понравилась фраза "САП гарантирует"...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Пт, окт 10 2014, 04:07 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, фев 09 2011, 07:19
Сообщения: 753
Откуда: Сибирь
Пол: Мужской
Была бы кнопка соответствующая - лайк бы поставил предыдущему посту :mrgreen:

_________________
Ешьте рыбу, в ней фосфор.
__
Чат в Telegram по SAP BW: http://t.me/BW_SAP


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Start/End routine
СообщениеДобавлено: Пт, окт 10 2014, 09:17 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
А мне не понравились последние 4 ответа, ибо они не в тему


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB