2012-10-04 16 views
5

मैं बस प्रो एसक्यूएल में जानना चाहता था कि हम उत्तेजक विकल्प को परिभाषित करते हैं। PROC SQL विकल्प STIMER | NOSTIMER निर्दिष्ट करता है कि PROC SQL संपूर्ण प्रक्रिया के लिए संचयी मूल्य लिखने के बजाय एसएएस लॉग में प्रत्येक कथन के लिए समय की जानकारी लिखता है या नहीं। NOSTIMER डिफ़ॉल्ट है।डेटा चरण क्वेरी की समय-सारणी जानकारी कैसे प्राप्त करें

अब डेटा सेट चरण में समय की जानकारी निर्दिष्ट करने के तरीके को कैसे करें। मैं proc sql चरण

data h; 
select name,empid 
from employeemaster; 
quit; 

उत्तर

5

प्रोक एसक्यूएल चरण अलग-अलग प्रभावी रूप से अलग-अलग डेटा कदम हैं, इसलिए एक अर्थ में आपको हमेशा एसएएस से समान जानकारी मिलती है। आप जो पूछ रहे हैं वह प्रभावी ढंग से यह पता लगाने के लिए है कि 'नाम का चयन' बनाम 'empid' बनाम कितना समय लगता है।

डेटा चरण में किसी व्यक्तिगत कथन का समय प्राप्त करने का कोई सीधा तरीका नहीं है, लेकिन आप पता लगाने के लिए डेटा चरण कोड लिख सकते हैं। समस्या यह है कि डेटा चरण पंक्ति-वार निष्पादित किया जाता है, इसलिए यह प्रोसी एसक्यूएल स्टीमर विवरण से वास्तव में काफी अलग है; डेटा चरण में जो कुछ भी आप करते हैं, वह आपके द्वारा बहुत लंबा समय लेगा, जब तक कि आप हैश टेबल लुकअप की तरह कुछ और जटिल नहीं कर रहे हों। डेटा को पहले लिखना और डेटा दूसरे में पढ़ने में काफी समय लगता है।

यदि आपकी चिंता है तो आपके पास लंबे डेटा चरणों की समस्या निवारण के लिए कुछ विकल्प हैं। विकल्प MSGLEVEL = मैं आपको इंडेक्स उपयोग, विवरण मर्ज इत्यादि के बारे में जानकारी दूंगा, जो उपयोगी नहीं हो सकता है अगर आपको यकीन नहीं है कि कुछ चीजें करने में लंबा समय क्यों लग रहा है (अधिक जानकारी के लिए एसएएस दस्तावेज में http://goo.gl/bpGWL देखें)। आप अपनी खुद की टाइमस्टैम्प लिख सकते हैं: है कि आप उपयोग की ज्यादा नहीं दिखाएंगे क्योंकि सबसे डेटा कदम पुनरावृत्तियों बहुत समय नहीं लगेगा, लेकिन अगर आप कुछ फैंसी कर रहे हैं यह मदद कर सकता है

data test; 
set sashelp.class sashelp.class; 
_t=time(); 
put _t=; 
run; 

बाधाओं रहे हैं। आप कुछ अंतराल पर केवल समय प्रिंट करने के लिए सशर्त बयानों का उपयोग भी कर सकते हैं - जब FIRST.ID पर उदाहरण के लिए आईडी द्वारा काम की जाने वाली प्रक्रिया में;

आखिरकार जो सूचनाएं पहले से ही नोट्स से प्राप्त होती हैं वह सबसे उपयोगी है। प्रोसी एसक्यूएल में आपको STIMER जानकारी की आवश्यकता होती है क्योंकि एसक्यूएल एक साथ कई चीजें कर रहा है, जबकि एसएएस आपको चरण-दर-चरण सब कुछ करने देता है। में

proc sort data=a; by ID; run; 
proc sort data=b; by ID; run; 
data x; 
merge a(in=a) b(in=b); 
by id; 
if a and b; 
run; 

कि आप उन कदमों (दो प्रकार के और मर्ज) में से प्रत्येक की अवधि के बारे में जानकारी प्राप्त होगी: -: उदाहरण लेकिन एसएएस में यह होगा

PROC SQL; 
create table X as select * from A,B where A.ID=B.ID; 
quit; 

एक कदम है एसएएस, जो स्टिमर आपको बताएगा उतना ही है।

+1

+1 अच्छा जवाब। आप यह स्पष्ट करना चाहते हैं कि हैश टेबल लुकअप बहुत अधिक तत्काल हैं (वे तब तक लेते हैं जब तक यह हैश को एक मान लेता है जो मूल रूप से हैशिंग एल्गोरिदम के रूप में कुछ भी नहीं है), लेकिन हैशटेबल को लोड करने में कुछ समय लग सकता है । –

-1

कोई भी तरीका नहीं उपयोग कर रहा हूं। PROC SQL STIMER प्रत्येक अलग निष्पादन योग्य SQL कथन/क्वेरी के लिए लॉग समय। डेटा चरण में, जैसा कि आप जानते हैं, डेटा चरण लूपिंग होता है, अवलोकन प्रति अवलोकन, इसलिए डेटा चरण कथन समय प्रति अवलोकन की तरह कुछ होगा, आइए लेनदेन कहें। वैसे भी यह उन सभी विवरणों का वर्णन नहीं करेगा जहां समय बिताया जा रहा है - डिस्क पढ़ने, लिखने आदि के लिए प्रतीक्षा तो मुझे लगता है कि यह बहुत उपयोगी नहीं होगा। सामान्य रूप से, एसएएस प्रदर्शन I/O संचालित होता है।

संबंधित मुद्दे