डेटा वेयरहाउस: मैं दैनिक स्नैपशॉट कैसे क्वेरी कर सकता हूं?


9

मेरे पास एक डेटाबेस के कुछ स्नैपशॉट हैं जो समय-सीमा नहीं हैं। उदाहरण के लिए:

  • स्नैपशॉट दिन 1:

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+
  • स्नैपशॉट दिन 2 (आज एक नई पोस्ट जोड़ी गई है):

    +----+----------------+------------+------------+        
    | ID |      Title     |  Category  |    Date    |
    +----+----------------+------------+------------+
    | 1  | My first post  | helloworld | 2015-01-01 |
    | 2  | My second post | other      | 2015-01-02 |
    +----+----------------+------------+------------+
  • स्नैपशॉट दिन 3 (पोस्ट 2 आज निकाल दिया गया है):

    +----+---------------+------------+------------+        
    | ID |     Title     |  Category  |    Date    |
    +----+---------------+------------+------------+
    | 1  | My First Post | helloworld | 2015-01-01 |
    +----+---------------+------------+------------+

इसलिए दिनों के बीच, तालिका की एक पंक्ति स्थिर हो सकती है या नहीं भी हो सकती है। अब, मुझे इस तरह से एक क्वेरी का उपयोग करने में सक्षम होना चाहिए:

SELECT category, COUNT(*) from day1.My_table group by category

यह एक दिन की एक तालिका के लिए है। यदि हम एक महीने में श्रेणी के अनुसार दैनिक औसत पदों को गिनना चाहते हैं तो हमें कुछ ऐसा करना चाहिए:

SELECT category, SUM(cnt) / 30 
from ( 
    SELECT category, COUNT(*) as cnt 
    from day1.My_table 
    group by category 
        UNION ALL SELECT category, COUNT(*) as cnt 
                  from day2.My_table 
                  group by category 
        UNION ALL ... 
        UNION ALL SELECT category, COUNT(*) as cnt 
                  from day30.My_table 
                  group by category
) group by category

एक और उदाहरण, एक महीने में प्रकाशित पोस्ट की संख्या :

SELECT COUNT(distinct id) 
from ( 
    SELECT id 
    from day1.My_table 
    UNION ALL ... 
    UNION ALL SELECT id 
              from day30.My_table
) 

मूल रूप से हमें एक वजन पर विचार करने की आवश्यकता होगी। यदि हमारे पास day1। M__table और day5.My_table है, तो हर पोस्ट जो दिन 1 में है और दिन 5 में नहीं है, को गिना जाएगा क्योंकि यह दिन 2,3,4 में भी था। हर पोस्ट जो day1 और day5 है, वह इस तरह से गिनेगी जैसे वह महीने के हर दिन (= अगले स्नैपशॉट तक) हो।

इसलिए अगर मैं प्रति दिन डाक की औसत संख्या पर विचार करना चाहता हूं तो = 6 महीने का समय, जहां मेरे पास सिर्फ 1 स्नैपशॉट है, मैं उस स्नैपशॉट को 30 के वजन के साथ असाइन करूंगा।

तो, एक रेंज के लिए एक महीने में प्रकाशित औसत पोस्ट> = 6 महीने पहले है:

SELECT category, SUM(cnt) / 30 
from ( 
    SELECT category, COUNT(*)*30 as cnt 
    from day1.My_table 
    group by category --- Note: I'm not considering the range defined from the user in this example.
) group by category;

जैसा कि टिप्पणी में भी कहा गया है, मुझे एक प्रश्न करने की आवश्यकता होगी जैसे:

Select category, AVG(*) 
from [fromRange-toRange].MyTable; 

एक चरम समाधान के लिए, मैं भविष्य के उपयोगकर्ता (लोगों को विपणन करने के लिए) को इस बारे में एक प्रश्न करने के लिए मेटलंगेज को लागू करने के विचार पर विचार कर रहा हूं।

क्या आपको लगता है कि मेटा-भाषा के बिना ड्रिल में इसे पूरा करने का एक तरीका है? मैं एक पुनरावर्ती यूडीएफ का उपयोग करके ऐसा करूंगा लेकिन वे प्रश्न वापस नहीं कर सकते।

हर स्नैपशॉट बड़ी 250GB है, और मैं इन डेटासेट की तुलना अन्य बाहरी डेटा (मैं इन डेटासेट की योजना से पहले से नहीं जानता हूं) से तुलना करने में सक्षम होना चाहता हूं।

क्या अपाचे ड्रिल के लिए उपयुक्त समाधान है? या इस समस्या का कोई और समाधान है?

साथ ही इस समस्या के बारे में किसी भी मेटा-भाषा या पेपर की सराहना की जाती है।

संपादित करें: हमने लेन-देन डेटा नहीं किया है। हमारे पास डेटा है जो समय में बदलता है, और जोड़ा या हटाया जा सकता है; इस कारण से हमें हर रोज स्नैपशॉट चाहिए। इसके अलावा, हम पहले से ही नहीं जानते हैं कि क्या किया जाएगा, इसलिए हम यह नहीं जान सकते कि किस प्रकार का एकत्रीकरण किया जाए। इसके अलावा हर पंक्ति में लगभग 100 कॉलम होते हैं, और प्रति स्नैपशॉट (मैसकल टेबल) 250GB के होते हैं। हमें इस डेटा पर प्रत्येक पंक्ति में, हर संभव दिन पर पूर्ण-पाठ खोज की आवश्यकता है।

खोज का एक उदाहरण "कितने पोस्ट के बारे में थे? तो यह कुछ कीवर्ड के लिए सभी पदों को खोजने के लिए है। प्रत्येक स्नैपशॉट में समान पंक्तियाँ हो सकती हैं या नहीं। इसके अलावा दो स्नैपशॉट एक ही पोस्ट हो सकते हैं, लेकिन थोड़ा संशोधित।


ऐसा लगता है कि आपके पास अपने डेटा के लिए एक सभ्य संरचना है .. क्या कोई विशिष्ट कारण है कि आप एक योजना-मुक्त समाधान की तलाश कर रहे हैं? योजना द्वारा मैं मान रहा हूँtable definitions/structures
vmachan

क्योंकि मैं अपने डेटासेट लोड करने से पहले नए तालिकाओं को परिभाषित नहीं करना चाहता। यकीन है कि अगर वहाँ एक समाधान है कि इस समस्या को संभाल सकता है, लेकिन टेबल को परिभाषित करने की आवश्यकता है आगे मैं इसे वैसे भी चुनूंगा।
फेडरिको पोंजी

250GB का दैनिक स्नैपशॉट? उन आवश्यकताओं के साथ? कैसे?
टॉम वी -

क्यों दैनिक स्नैपशॉट? 250 जीबी दिन में कितना बदलता है? धीरे-धीरे बदलते आयामों के साथ क्या गलत है?
23

कृपया इस समस्या को डेटा वेयरहाउसिंग के संदर्भ में नहीं, बल्कि क्वेरी और / या बड़े डेटा के संदर्भ में कैसे करें। मेरे पास अपने डेटाबेस के अलग-अलग दैनिक स्नैपशॉट हैं, और मैं उन्हें प्रभावी ढंग से क्वेरी करने का एक तरीका चाहूंगा।
फेडेरिको पोंजी

जवाबों:


2

चलो बॉक्स से बाहर सोचते हैं। "स्नैपशॉट" होने के बजाय, हमारे पास "लॉग" है। आपके पास वर्तमान में "चीजों की" वर्तमान स्थिति है; "लॉग" जोड़ने से "इतिहास" मिलेगा, जिसमें से 'खोई' जानकारी प्राप्त की जा सकती है।

लॉग को लागू करने का एक तरीका टेबल TRIGGERपर INSERTया UPDATEउस पर लॉग फ़ाइल में ट्रिगर लिखना है। यह लॉग तदर्थ प्रश्नों के लिए सुखद नहीं होगा, इसलिए एक रात का काम (या शायद प्रति घंटा) करें जो दिन के लिए परिवर्तनों का सारांश देता है - पदों की संख्या का शुद्ध लाभ (या हानि), आदि "दिन 2" की जानकारी और "पिछले महीने" की जानकारी इस सारांश तालिका से काफी जल्दी प्राप्त की जा सकती है। या शायद संक्षेप का एक दूसरा स्तर जो यह घोषित करता है कि राज्य प्रत्येक दिन के लिए क्या था। मुझे संदेह है कि UNIONक्या जरूरत होगी। "स्नैपशॉट" शामिल नहीं होगा।


1
मैंने दैनिक स्नैपशॉट क्वेरी करने के तरीके के बारे में पूछा, आप सिर्फ एक अनुकूलन के बारे में बात कर रहे हैं - मैं इसके बारे में बाद में सोचूंगा। धन्यवाद
फेडरिको पोंजी

1
स्नैपशॉट्स (मेरी राय में) से निपटना मुश्किल है, इसलिए मैं एक मुश्किल समाधान में उलझने के बजाय 'वास्तविक' समस्या को हल करने का एक तरीका पेश करने की कोशिश कर रहा था। इसके अलावा, संक्षेप में काफी तेज प्रश्नों की अनुमति होगी।
रिक जेम्स

2

तो मैं जो खोज रहा था, वह एक नई प्रकार की प्रणाली है जो डेटावेयर से संबंधित है: डेटा लेक सिस्टम।

आप विकिपीडिया पर अधिक जान सकते हैं :

एक डेटा झील एक प्रणाली के भीतर डेटा संग्रहीत करने की एक विधि है जो डेटा को वैरिएंट स्कीमा और संरचनात्मक रूपों में कॉल करने की सुविधा प्रदान करती है, आमतौर पर ऑब्जेक्ट ब्लॉब या फाइलें। Hadoop और AWS S3 प्लेटफॉर्म का इस्तेमाल डाटा लेक रिपोजिटरी बनाने के लिए किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.