На работе у меня есть таблица заявок на 200 миллионов строк (300+ столбцов, ~ 200 ГБ), которая индексируется по номеру члена (memno) и дате обслуживания (dos).
Дважды в месяц мне приходится извлекать 50 000 заявок на номера участника из фиксированного диапазона дат (скажем, с 01.01.2017 по 01.01.2008), где мне нужны только ограниченные столбцы из заявок.
MyInputList имеет только 1 столбец (memno).
proc sql;
create table myClaims as
select a.claimno, a.dos, a.memno
from s.claims a inner join myInputList b
on a.memno = b.memno
where a.dos between '01Jan2017'd and '01May2018'd;
quit;
Обычно для запуска PROC SQL требуется около 3-4 часов.Сами данные не хранятся в RDMS, я прочитал много эссе SAS о том, что PROC SQL представляет собой декартово произведение, и, поскольку мне не нужны все 300 столбцов на запись, мне интересно, будет ли лучше использовать хеш-таблицу.
Мой вопрос: могу ли я дать «подсказки» хеш-таблице, чтобы она могла использовать индексированные столбцы (memno, dos)
?
data myClaimsTest (drop=rc);
if 0 then set myInputList;
declare hash vs(hashexp:7, dataset:'myInputList');
vs.definekey('memno');
vs.definedata();
vs.definedone();
do until (eof);
set s.claims (keep=claimno dos) end=eof;
if vs.find()=0 then output;
end;
stop;
run;
Новый раздел (добавленный Ричардом)
Запустите этот код, чтобы получить список переменных и индексов.
dm "clear output"; ods listing; ods noresults; options nocenter; title;
proc contents varum data=all_claims;
run;
dm "output" output; ods results;
Скопируйте и вставьте нижнюю часть вывода здесь.Замените этот пример фактическим списком.
Variables in Creation Order
# Variable Type Len Format
1 claim_id Num 8
2 member_id Num 8
3 claim_date Num 8 YYMMDD10.
Alphabetic List of Indexes and Attributes
# of
Unique Unique
# Index Option Values Variables
1 PICK YES 333338 member_id claim_date