У меня есть две большие таблицы, которые я пытаюсь объединить, чтобы сгруппировать первые записи на основе поля из второй таблицы. Левая таблица содержит около 50 млн записей событий, в правой таблице - около 35 млн записей ежемесячных интервалов. Ежемесячные интервалы находятся на уровне subjID, поэтому я не могу уменьшить размер правой таблицы, сохраняя только даты начала и окончания. В настоящее время для соединения требуется около 40-60 минут.Оптимизация SAS Proc SQL-запрос
Я попытался создать простые индексы для subjID, eventDate, startDate и endDate, однако, похоже, это не улучшило производительность (создание индексов завершено за 5 минут, соединение завершено за 38 минут).
Есть ли другой вариант, который я мог бы использовать для улучшения обработки?
Левая таблица событий на уровне subjID:
data eventsTable;
input @1 subjID 8.
@10 eventDate date9.;
format eventDate mmddyy10.;
datalines;
101 01AUG2011
101 28AUG2011
101 30AUG2011
101 01SEP2011
101 12SEP2011
101 28SEP2011
102 01JAN2015
102 15JAN2015
102 01FEB2015
102 16FEB2015
;
run;
Right Таблица ежемесячных интервалов на уровне subjID. Я пытаюсь привести ENDDATE к событиям, если события произошли между датой начала и окончания:
data monthlyTable;
input @1 subjID 8.
@10 startDate date9.
@22 endDate date9.;
format startDate endDate mmddyy10.;
datalines;
101 28JUL2011 30AUG2011
101 30AUG2011 28SEP2011
101 28SEP2011 28OCT2011
102 01DEC2014 02JAN2015
102 02JAN2015 02FEB2015
102 02FEB2015 02MAR2015
;
run;
Выход:
proc sql;
create table wantTable as
select a.*,
endDate as monthlyDate
from eventsTable a left join monthlyTable b on
a.subjID = b.subjID
where a.eventDate > b.startDate and a.eventDate <= b.endDate
order by subjID, eventDate;
quit;
Вы просто добавляете 'enddate' из' monthTable' или присоединяете ли вы некоторые другие переменные? – user667489
Я добавляю 5 переменных из ежемесячной таблицы. На практике моя левая таблица имеет 6 переменных, а моя правая таблица имеет 11 переменных. – Chibuzo
Я обновил свой ответ, включив подход хеширования, который позволит вам прикрепить все переменные за один раз. – user667489