2017-03-28 11 views
8

में स्टार स्कीमा जेनरेट करना मैं एसक्यूएल डाटावायरहाउस दुनिया से हूं जहां एक फ्लैट फीड से मैं आयाम और तथ्य सारणी उत्पन्न करता हूं। सामान्य डेटा गोदाम परियोजनाओं में हम फ़ीड को वास्तविकता और आयाम में विभाजित करते हैं। उदाहरण के लिए:हाइव

enter image description here

मैं पूरी तरह से Hadoop के लिए नया हूँ और मुझे पता है कि मैं छत्ते में डेटा गोदाम का निर्माण कर सकते आया था। अब, मैं गाइड का उपयोग करने से परिचित हूं जो मुझे लगता है कि हाइव में प्राथमिक कुंजी के रूप में लागू होता है। तो, नीचे की रणनीति हाइव में तथ्य और आयाम को लोड करने का सही तरीका है?

  1. लोड स्रोत डेटा को एक हाइव टेबल में लोड करें; मान लें कि Sales_Data_Warehouse
  2. sales_data_warehouse से आयाम उत्पन्न करें; पूर्व:

    चयन New_Guid(), ग्राहक का, Customer_Address Sales_Data_Warehouse

  3. जब सभी आयामों तो किया जाता है

    चयन New_Guid() 'Fact_Key' के रूप में की तरह इस तथ्य तालिका लोड, Customer.Customer_Key, स्टोर से .Store_Key ... Sales_Data_Warehouse के रूप में 'स्रोत' से source.Customer_Name = Customer.Customer_Name पर Customer_Dimension ग्राहक शामिल हों और source.Customer_Address = Customer.Customer_Address शामिल हों Store_Dimension के रूप में 'स्टोर' पर Store.Store_Name = Source.St ore_Name शामिल हों Product_Dimension के रूप में 'उत्पाद' पर .....

इस तरह से मैं अपने तथ्य और छत्ता में आयाम तालिका लोड करना चाहिए है?

इसके अलावा, सामान्य गोदाम परियोजनाओं में हमें आयाम विशेषताओं को अद्यतन करने की आवश्यकता है (उदा: ग्राहक_एड्रेस कुछ और में बदल दिया गया है) या तथ्यों की तालिका विदेशी कुंजी को अपडेट करना होगा (शायद ही कभी, लेकिन ऐसा होता है)। तो, मैं हाइव में एक INSERT-UPDATE लोड कैसे कर सकता हूं। (जैसे हम एसएसआईएस में लुकअप करते हैं या टीएसक्यूएल में मेर्ज स्टेटमेंट करते हैं)?

+1

जिस तरह से आप कर रहे हैं वह सही है। हाइव संस्करण 0.14 –

+0

से अद्यतन क्वेरी का समर्थन करता है यदि ग्राहक नाम बदलते हैं तो –

+0

कोई महत्वपूर्ण अवधारणा नहीं है, तो आपको दोनों टेबल "ग्राहक" तालिका और व्युत्पन्न तालिका –

उत्तर

1

हम अभी भी हैडोप और हाइव पर आयामी मॉडल के लाभ प्राप्त करते हैं। हालांकि, हडोप की कुछ विशेषताओं के लिए हमें आयामी मॉडलिंग के मानक दृष्टिकोण को थोड़ा अपनाने की आवश्यकता है।

हाडोप फ़ाइल सिस्टम अपरिवर्तनीय है। हम केवल जोड़ सकते हैं लेकिन डेटा अपडेट नहीं कर सकते हैं। नतीजतन हम केवल आयाम तालिकाओं में रिकॉर्ड जोड़ सकते हैं (जबकि हाइव ने एक अपडेट फीचर और लेनदेन जोड़ा है, लेकिन यह बदबूदार लगता है)। धीरे-धीरे हडोप पर आयाम बदलना डिफ़ॉल्ट व्यवहार बन जाता है। आयाम तालिका में नवीनतम और सबसे अद्यतित रिकॉर्ड प्राप्त करने के लिए हमारे पास तीन विकल्प हैं। सबसे पहले, हम एक ऐसा दृश्य बना सकते हैं जो विंडोिंग फ़ंक्शंस का उपयोग करके नवीनतम रिकॉर्ड पुनर्प्राप्त कर सके। दूसरा, हम पृष्ठभूमि में चल रहे एक कॉम्पैक्शन सेवा कर सकते हैं जो नवीनतम स्थिति को पुनर्जीवित करता है। तीसरा, हम अपने आयाम तालिकाओं को म्यूटेबल स्टोरेज में स्टोर कर सकते हैं, उदा। दो प्रकार के भंडारण में एचबीएएस और संघीय प्रश्न।

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

में एकाधिक अनाज को संभालने के लिए BigQuery/Postgres आदि में array_agg जैसे SQL एक्सटेंशन का उपयोग कर सकते हैं। मैं सरोगेट कुंजी की उपयोगिता पर भी सवाल उठाऊंगा। प्राकृतिक कुंजी का उपयोग क्यों नहीं करें? शायद जटिल यौगिक कुंजी के लिए प्रदर्शन एक मुद्दा हो सकता है लेकिन अन्यथा सरोगेट कुंजी वास्तव में उपयोगी नहीं हैं और मैं उनका कभी भी उपयोग नहीं करता हूं।