Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

sas में proc sql का उपयोग करके गोदाम (ओरेकल इंजन) से डेटा खींचते समय सरल यादृच्छिक नमूनाकरण

रिकॉर्ड्स को सॉर्ट करने के लिए DBMS_RANDOM पैकेज का उपयोग करें और फिर वांछित नमूना आकार तक सीमित करने के लिए एक रो लिमिटिंग क्लॉज का उपयोग करें

dbms_random.value फ़ंक्शन तालिका में सभी पंक्तियों के लिए 0 और 1 के बीच एक यादृच्छिक संख्या प्राप्त करता है और हम यादृच्छिक मान के आरोही क्रम में क्रमबद्ध करते हैं।

आपके द्वारा पहचाने गए नमूना सेट को बनाने का तरीका यहां दिया गया है:

    SELECT
    *
FROM
    (
        SELECT
            *
        FROM
            tbl1
        ORDER BY dbms_random.value
    )
FETCH FIRST 1000000 ROWS ONLY;

नमूना स्कीमा तालिका के साथ प्रदर्शित करने के लिए, emp , हम 4 रिकॉर्ड का नमूना लेते हैं:

   [email protected]> SELECT
  2      empno,
  3      rnd_val
  4  FROM
  5      (
  6          SELECT
  7              empno,
  8              dbms_random.value rnd_val
  9          FROM
 10              emp
 11          ORDER BY rnd_val
 12      )
 13  FETCH FIRST 4 ROWS ONLY;
EMPNO  RND_VAL
7698   0.06857749035643605682648168347885993709
7934   0.07529612360785920635181751566833986766
7902   0.13618520865865754766175030040204331697
7654   0.14056380246495282237607922497308953768


[email protected]> SELECT
  2      empno,
  3      rnd_val
  4  FROM
  5      (
  6          SELECT
  7              empno,
  8              dbms_random.value rnd_val
  9          FROM
 10              emp
 11          ORDER BY rnd_val
 12      )
 13  FETCH FIRST 4 ROWS ONLY;
EMPNO  RND_VAL
7839   0.00430658806761508024693197916281775492
7499   0.02188116061148367312927392115186317884
7782   0.10606515700372416131060633064729870016
7788   0.27865276349549877512032787966777990909

ऊपर दिए गए उदाहरण के साथ, ध्यान दें कि empno SQL*Plus कमांड के निष्पादन के दौरान महत्वपूर्ण परिवर्तन।

प्रदर्शन आपके द्वारा वर्णित पंक्तियों की संख्या के साथ एक समस्या हो सकती है।

संपादित करें:

150 gigs - 79 MM के क्रम में तालिका आकार के साथ, कोई भी छँटाई दर्दनाक होगी।

यदि तालिका में 1 से बढ़ाए गए अनुक्रम के आधार पर एक सरोगेट कुंजी होती है, तो हम कुंजी के आधार पर प्रत्येक nवें रिकॉर्ड को चुनने का तरीका अपना सकते हैं।

जैसे

    --scenario n = 3000

 FROM
    tbl1
WHERE
    mod(table_id, 3000) = 0;

यह दृष्टिकोण एक इंडेक्स का उपयोग नहीं करेगा (जब तक कि कोई फ़ंक्शन आधारित इंडेक्स नहीं बनाया जाता है), लेकिन कम से कम हम इस आकार के डेटा सेट पर एक प्रकार का प्रदर्शन नहीं कर रहे हैं।

मैंने एक तालिका के साथ एक व्याख्या योजना का प्रदर्शन किया जिसमें करीब 80 मिलियन रिकॉर्ड हैं और यह एक पूर्ण तालिका स्कैन करता है (हालत इसे फ़ंक्शन आधारित इंडेक्स के बिना मजबूर करती है) लेकिन यह व्यवहार्य दिखता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. plsql के साथ किसी अन्य जेसन ऑब्जेक्ट जेसन ऑब्जेक्ट के अंदर एक जेसन ऑब्जेक्ट संलग्न या संलग्न करें

  2. मैं Oracle पर जॉइन के साथ FOR UPDATE का उपयोग कैसे कर सकता हूं?

  3. एसक्यूएल में दो कॉलम का अंतर लेना चाहते हैं

  4. sqlplus के साथ शेल स्क्रिप्ट और पासवर्ड पर विशेष वर्ण

  5. हाइबरनेट 4.1 के साथ मूल क्वेरी निष्पादित करना