2014-10-13 13 views
5

के साथ तालिकाओं के लिए अधिक डिस्क स्थान का उपयोग क्यों करती है मेरे पास S3 पर कुछ सौ CSV फ़ाइलों के रूप में डेटा का एक बड़ा सेट है जो कुल में 1.7 टीबी (असंपीड़ित) हैं। मैं इसे Redshift क्लस्टर पर एक खाली तालिका में कॉपी करने की कोशिश कर रहा हूं।Redshift COPY क्वेरी एक प्रकार की कुंजी

क्लस्टर खाली है (कोई अन्य टेबल नहीं) और इसमें 10 dw2.large नोड्स हैं। यदि मैं तालिका पर एक सॉर्ट कुंजी सेट करता हूं, तो प्रतिलिपि आदेश सभी उपलब्ध डिस्क स्थान को लगभग 25% रास्ते के माध्यम से और बंद कर देता है। यदि कोई सॉर्ट कुंजी नहीं है, तो कॉपी सफलतापूर्वक पूर्ण हो जाती है और उपलब्ध डिस्क स्थान के 45% से अधिक का उपयोग नहीं करती है। यह व्यवहार सुसंगत है कि मैं वितरण कुंजी भी सेट करता हूं या नहीं।

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

उत्तर

7

Redshift टीम से इसका उत्तर मिला। क्लस्टर को आने वाले डेटा आकार के कम से कम 2.5x की फ्री स्पेस की आवश्यकता होती है ताकि इस तरह के अस्थायी स्थान के रूप में उपयोग किया जा सके। आप अपने क्लस्टर को अपसाइज़ कर सकते हैं, डेटा कॉपी कर सकते हैं और इसे वापस आकार बदल सकते हैं।

+0

आने वाले डेटा का आकार 2.5x है? यह हास्यास्पद लगता है। यह आपके द्वारा डालने वाली पंक्तियों की संख्या के कुछ निरंतर समय नहीं है, लेकिन यह वास्तव में पंक्तियों के आकार पर निर्भर है? – michaelsnowden

+0

हमें इसके साथ भी बड़ी समस्याएं थीं। हमारा क्लस्टर आयात की शुरुआत में 40% डिस्क उपयोग पर था और 100% तक पहुंच जाएगा और कभी-कभी आयात को भी दुर्घटनाग्रस्त कर देगा, जो हास्यास्पद लगता है। –

0

प्रत्येक dw2.large बॉक्स में 0.16 टीबी डिस्क स्पेस है। जब आपने कहा कि आपके पास 10 नोड्स का समूह है, तो कुल स्थान उपलब्ध 1.6 टीबी है। आपने उल्लेख किया है कि आपके पास रेडशिफ्ट में लोड होने के लिए लगभग 1.7 टीबी कच्चा डेटा (असंपीड़ित) है।

जब आप प्रतिलिपि आदेशों का उपयोग करके redshift को डेटा लोड करते हैं तो redshift स्वचालित रूप से आपको डेटा को संपीड़ित करता है और इसे तालिका लोड करता है। एक बार आप किसी भी db तालिका आप नीचे दिए गए क्वेरी

Select "column", type, encoding 
from pg_table_def where tablename = 'my_table_name' 

द्वारा संपीड़न एन्कोडिंग देख सकते हैं लोड तालिका कोई तरह कुंजी है तो आप अपने डेटा लोड एक बार। देखें कि संपीड़न क्या लागू किया जा रहा है। मैं तुम्हें छोड़ और टेबल हर बार जब आप अपने परीक्षण के लिए डेटा लोड बनाने ताकि एन्कोडिंग बार दबाने विश्लेषण किया जाएगा प्रत्येक time.Once आप प्रतिलिपि आदेशों का उपयोग कर अपने तालिका लोड लिंक और आग स्क्रिप्ट नीचे देखें निर्धारित करने के लिए तालिका आकार

http://docs.aws.amazon.com/redshift/latest/dg/c_analyzing-table-design.html सुझाव

जब आप अपनी तालिका और लोड डेटा के लिए सॉर्ट कुंजी लागू करते हैं, तो सॉर्ट कुंजी में कुछ डिस्क स्थान भी होता है।

चूंकि आउट सॉर्ट कुंजी के साथ तालिका को सॉर्ट कुंजी के साथ तालिका की तुलना में कम डिस्क स्थान की आवश्यकता होती है।

आपको यह सुनिश्चित करने की ज़रूरत है कि तालिका में संपीड़न लागू किया जा रहा है।

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

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