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