Выполнять несколько запросов одновременно в SAS - PullRequest
3 голосов
/ 24 августа 2010

У меня 36 полностью независимых запросов, которые мне нужно выполнять на регулярной основе, которые выполнялись бы намного быстрее, если бы они могли выполнять 3 за один раз (база данных отменяет наши запросы, если мы пытаемся выполнить более 3 за один раз) вместо каждый ждет завершения предыдущего.

Я бы хотел сделать что-то подобное

/* Some prep code here*/

/* Launch batch 1 containing queries 1-12*/
/* Immediately launch batch 2 (13-24) without waiting for 1-12 to finish*/
/* Immediately launch batch 3 (25-36)*/

/* Wait until all 3 batches are done and run some conclusion code*/

Или, если возможно, просто дайте ему 36 запросов вместе и сделайте так, чтобы он выполнялся по нескольку за раз, следя за тем, чтобы в любой момент времени не было запущено более 3 запросов, и каждый раз, когда завершается, просто добавьте следующий из стек.

Можно ли это сделать с помощью SAS?

Спасибо

Ответы [ 3 ]

3 голосов
/ 24 августа 2010

Я предполагаю, что у вас есть сервер SAS, и с локального компьютера вы запускаете запросы.(Если вы не работаете и работаете локально, это не проблема, вы можете выполнить rsubmit для вашего создателя на локальном компьютере). Даже с SAS / Base можно запускать 3 запроса одновременно, имея в одном коде три соединения.,Здесь я предполагаю, что вы не хотите делиться рабочими библиотеками и выполнять абсолютно независимые запросычтобы он запустил другой запрос, как только он закончится, но я верю, что можно обойти его.

Пока с помощью этого кода вы можете легко запускать 3 запроса за раз, затем, когда они заканчиваютсядо 3 больше и так далее.Для вашего другого запроса я подумаю об этом:)

2 голосов
/ 09 сентября 2010

На некоторых платформах (наверняка, в Windows и UNIX), если конфигурация позволяет сеансу SAS взаимодействовать с ОС, оператор SYSTASK дает вам возможность выполнять, перечислять или завершать асинхронные задачи. В сочетании с оператором WAITFOR вы можете сделать что-то вроде этого:

systask command "sas prog1.sas" taskname=sas1;
systask command "sas prog2.sas" taskname=sas2;
systask command "sas prog3.sas" taskname=sas3;
waitfor _all_ sas1 sas2 sas3; /* suspend current session until the three jobs are finished */

См. Документацию по операторам SYSTASK и WAITFOR (для платформы Windows).

0 голосов
/ 24 августа 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...