Слияние таблицы SAS с проходом SQL
Я пытаюсь объединить таблицу SAS в сквозной SQL-запрос, чтобы сократить время, необходимое для запроса базы данных SQL. В данный момент я просто использую проход, как есть, и требуется примерно 8-9 часов, чтобы собрать все со стола, прежде чем я потом выберу то, что хочу потом.
На данный момент проход выглядит так:
proc sql;
connect to ODBC as CAW(datasrc = "CAW_ULI_STATIC");
create table test as
select aelref, aelprdtyp, aelsubtyp, aelloc, aelopndte,
hdscontrolopendate, hdscontrolclosedate, hdscontrolaction,
from connection to CAW (
select aelref, aelprdtyp, aelsubtyp, aelloc, aelextnbr, aelbrnpfx, aelitnnbr, aelopndte,
aelclddte, hdscontrolopendate, hdscontrolclosedate, hdscontrolaction
from PUBLIC_withpersonal_short.Vwhdscisagrmnt (nolock)
where HDSControlACTION <> 'D'
and aelsubtyp in (1, 2, 3, 4, 5, 10, 20, 21)
order by aelref, hdscontrolopendate, hdscontrolclosedate
);
disconnect from CAW;
;
quit;
Но сейчас я пытаюсь использовать другой набор данных SAS, чтобы сузить то, что я извлекаю из прохода, выполняя левое соединение, чтобы оно выглядело так:
proc sql;
connect to ODBC as CAW(datasrc = "CAW_ULI_STATIC");
create table test as
select a.*, aelref, aelprdtyp, aelsubtyp, aelloc, aelopndte,
hdscontrolopendate, hdscontrolclosedate, hdscontrolaction,
from Import1 a left join connection to CAW (
select aelref, aelprdtyp, aelsubtyp, aelloc, aelextnbr, aelbrnpfx, aelitnnbr, aelopndte,
aelclddte, hdscontrolopendate, hdscontrolclosedate, hdscontrolaction
from PUBLIC_withpersonal_short.Vwhdscisagrmnt (nolock)
where HDSControlACTION <> 'D'
and aelsubtyp in (1, 2, 3, 4, 5, 10, 20, 21)
order by aelref, hdscontrolopendate, hdscontrolclosedate
);
disconnect from CAW b;
on a.ANUM = b.aelextnbr
;
quit;
Но это не похоже на добавление в соединение до подключения. Это правильный путь, или я что-то упустил?
Благодарю.
1 ответ
Нет. Ваш второй запрос SQL только уменьшит количество записанных записей, но SAS все равно потребуется извлечь все записи из вашего соединения ODBC, чтобы выполнить соединение.
Вставьте ваш набор данных IMPORT1 SAS в базу данных ODBC и выполните соединение там.
Или, если количество записей достаточно мало, используйте макропеременную, чтобы сгенерировать список значений ANUM, чтобы включить его в запрос. Что-то вроде этого:
proc sql noprint ;
select ANUM into :list separated by ',' from import1;
connect .... ;
select ... from connection to odbc
(... where aelextnbr in (&list)
);
quit;