Olá pessoal, tudo bem?
Queria saber se alguém tem alguma ideia de como posso fazer uma query criar várias tabelas determinando o número máximo de linhas.
Situação: Eu tenho um query que demora muito e acaba que o servidor me derruba por esse motivo, esta query é enviada pelo SAS ao netezza. Consigo fazer algo para retornar partes da query por vez?
Faço a query e retorno as primeiras 1 milhão de linhas, depois pego as próximas 1 milhão de linhas até o fim das linhas dessa query.
Alguém consegue me ajudar?
Ola boa tarde,
Você está usando PROC SQL ou PROC FEDSQL?
Caso seja PROC SQL verifique os parametros:
NOBS= restricts the number of rows that PROC SQL retrieves from any single data source.
OUTOBS= restricts the number of rows that PROC SQL includes in the output.
Encontrei nesta outra comunidade: Solved: Is there a LIMIT function in PROC SQL - SAS Support Communities
@wilkobaTudo bem?
Obrigado pelo retorno! Eu estou usando PROC SQL mesmo, conheço essas opções e li o link que enviou mas como eu faria para no dataset want1 ter das linhas 1 a 1 milhão, no dataset want2 ter as linhas de 1.000.001 até 2.000.000 e assim por diante?
Desculpe a demora para responder. Pergunta: Você esta utilizando SAS9 (E.Guide) ou esá com SAS Viya ?
Caso seja o SAS Viya, de uma olhada no PROC FEDSQL que pode executar esta query usando paralelismo.
SAS Help Center: FedSQL Distributed Processing in CAS
Caso seja SAS9 e estiver usando o PROC SQL com pass-through, existe um parametro no SELECT do Netezza , LIMIT ou função ROW_NUMBER()
Netezza ROWNUM Pseudo Column Alternative - DWgeek.com
SELECT (to retrieve rows) - IBM Documentation
Espero ter ajudado
Olá! Bom dia!
Pelo que entendi, você está em busca de segmentar a extração, correto? Não existe nenhum atributo no Dataset que você possa utilizar como filtro, a exemplo de datas? Dessa forma você poderá executar cada "pedaço" utilizando Macros ou método em Loop.
@RxJuniortudo bem?
Obrigado por responder!
Pensei nessa resolução e uso ela para pegar a data em loop pois também sobre pelo menos problema. Procurei outros campos mas não achei algo que agregue bem as consultas. Está ficando muito demorado.
Tem outra ideia?
DATA table1 table2;
set table;
if _N_<=80 then output table1;
else if _N_<=160 then output table2;
run;
Em vez de vc fazer por proc sql pq vc não faz por dataset assim:
DATA table1 table2;
set table;
if _N_<=80 then output table1;
else if _N_<=160 then output table2;
run;
Veja a função monotonic() para o PROC SQL.
MONOTONIC function in PROC SQL - SAS Support Communities
Assim você poderá criar duas queries...uma com o WHERE monotonic() < 1000000 e outra com o WHERE monotonic() >=1000000
Um step back me parece necessário aqui.
Talvez redesenhar seu problema possa revelar uma solução mais simples do que contornar a limitação do servidor.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!