डेटा और स्प्रेडशीट · CSV क्लीनर
CSV में खाली स्ट्रिंग्स, NULL और गुम फ़ील्ड एक ही चीज़ क्यों नहीं हैं?
· यह क्यों मायने रखती है
CAसवी json डेटा-प्रारूप
CSV के पास 'कोई मूल्य नहीं' कहने का कोई तरीका नहीं है; इसमें केवल पाठ है. यह पोस्ट बताती है कि खाली फ़ील्ड, उद्धृत खाली स्ट्रिंग्स, शाब्दिक NULL और छोटी पंक्तियाँ कैसे भिन्न होती हैं, लोडर उनके बारे में असहमत क्यों हैं, और JSON में रूपांतरण कैसे प्रश्न को बल देता है।
एक ही रिक्त सेल एक सिस्टम में NULL बन जाता है और दूसरे में एक खाली स्ट्रिंग बन जाता है - इससे जोड़, गिनती और औसत में परिवर्तन क्यों होता है
खाली दिखने वाली स्रोत कोशिकाएँ कई इतिहास ले जा सकती हैं, लेकिन ToolAcre का JSON आउटपुट जानबूझकर उन्हें एक प्रतिनिधित्व तक सीमित कर देता है। एक खाली फ़ील्ड, उद्धृत खाली फ़ील्ड और पार्सर द्वारा गद्देदार छोटी पंक्ति सभी एक वर्तमान कुंजी के तहत खाली स्ट्रिंग बन जाते हैं। उपस्थिति से कोई शून्य अनुमान नहीं लगाया जाता है।
वह स्थिरता तभी उपयोगी है जब उपभोक्ता उसे जानता हो। विशेष रूप से शून्य के लिए कोड परीक्षण "" के लिए डिफ़ॉल्ट को प्रतिस्थापित नहीं करेगा। कन्वर्टर द्वारा संरक्षित भेदों को मानने के बजाय प्राप्त सीमा पर लापता-मूल्य अनुबंध का निर्णय लें जिसे CSV सिंटैक्स या उसके चुने हुए पार्स मॉडल ने बरकरार नहीं रखा है।
ToolAcre में, एक खाली और एक गद्देदार गायब सेल दोनों खाली स्ट्रिंग बन जाते हैं जब तक कि कोई उपभोक्ता उनकी दोबारा व्याख्या नहीं करता
CSV में दो सीमांकक हो सकते हैं जिनके बीच कुछ भी नहीं है, एक स्पष्ट रूप से उद्धृत खाली स्ट्रिंग, शाब्दिक पाठ जैसे NULL या NA, और हेडर चौड़ाई से पहले समाप्त होने वाली एक पंक्ति। ToolAcre पहले दो को खाली स्ट्रिंग के रूप में पार्स करता है और शाब्दिक टोकन को सामान्य पाठ की तरह अछूता छोड़ देता है।
एक छोटी पंक्ति के लिए, यह `RAGGED_ROW` चेतावनी उत्सर्जित करता है और अनुपस्थित पिछली कोशिकाओं को खाली स्ट्रिंग्स के साथ पैड करता है। एक लंबी पंक्ति के लिए, यह तालिका में अतिरिक्त सेल बनाए रखता है, लेकिन JSON रूपांतरण में उनके लिए कोई हेडर कुंजी नहीं होती है और उन्हें छोड़ दिया जाता है। इस विषमता के कारण संरचनात्मक चेतावनी को रूपांतरण से पहले कार्रवाई की आवश्यकता होती है।
आम लोडर प्रत्येक की व्याख्या कैसे करते हैं - स्प्रेडशीट, डेटाबेस और डेटा-फ़्रेम लाइब्रेरी में अलग-अलग डिफ़ॉल्ट
विभिन्न डेटाबेस क्लाइंट और विश्लेषण लाइब्रेरी अपने स्वयं के कॉन्फ़िगर करने योग्य शून्य टोकन और खाली-फ़ील्ड नीतियों को उजागर करते हैं। यह रिपॉजिटरी उन डिफ़ॉल्ट को स्थापित नहीं कर सकती है, इसलिए लेख यह दावा नहीं करता है कि सभी स्प्रेडशीट या लोडर सहमत हैं। यह एक कार्यान्वयन का दस्तावेजीकरण करता है जिसके स्रोत और परीक्षण उपलब्ध हैं।
फ़ाइल को किसी अन्य सिस्टम को सौंपते समय, उस आयातक की सेटिंग्स पढ़ें और ``, `""`, NULL और एक छोटी पंक्ति के लिए फिक्स्चर बनाएं। वास्तविक सीमा पर एक विश्वसनीय अनुबंध प्रदर्शित किया जाता है। "CSV का सामान्य अर्थ" के बारे में सामान्य लोककथाएँ लापता मूल्यों के लिए बहुत कमज़ोर हैं।
लोडर डिफ़ॉल्ट अलग-अलग होते हैं; यह आलेख स्प्रेडशीट या डेटाबेस व्यवहार को सामान्यीकृत करने के बजाय ToolAcre का दस्तावेजीकरण करता है
पाठ NULL विशेष रूप से खतरनाक है क्योंकि यह वास्तविक सामग्री या प्रेषक का प्रहरी हो सकता है। ToolAcre में कोई कॉन्फ़िगर की गई प्रहरी सूची नहीं है और इसलिए इसे चार-वर्ण वाली स्ट्रिंग "NULL" के रूप में संरक्षित किया गया है। यही बात NA, N/A, शून्य और निर्माता द्वारा उपयोग किए जा सकने वाले किसी भी अन्य टोकन के लिए भी सच है।
फ़ील्ड-विशिष्ट नियम के बिना विश्व स्तर पर ऐसी स्ट्रिंग्स को प्रतिस्थापित न करें। एक नोट्स कॉलम में वैध रूप से "NULL" हो सकता है, और एक कोड कॉलम में NA का उपयोग किया जा सकता है। निर्माता दस्तावेज़ या स्कीमा के साथ अर्थ का समाधान करें, फिर समीक्षा के तहत केवल उपयुक्त कॉलम को रूपांतरित करें।
JSON आपको निर्णय लेने देता है - फ़ाइल परिवर्तित होने के बाद शून्य, खाली स्ट्रिंग और अनुपस्थित कुंजी तीन अलग-अलग चीजें हैं
JSON शून्य, एक खाली स्ट्रिंग और एक अनुपस्थित संपत्ति को अलग करता है, लेकिन ToolAcre प्रत्येक हेडर कॉलम के लिए स्ट्रिंग मानों के साथ वर्तमान कुंजी चुनता है। लुप्त या गद्देदार कोशिकाएँ "" बन जाती हैं। कन्वर्टर JSON शून्य उत्पन्न नहीं करता है और एक कुंजी को केवल इसलिए नहीं छोड़ता है क्योंकि एक सेल खाली है।
एक अधिशेष सेल अलग है: बिना किसी संबंधित हेडर के, असाइन करने के लिए कोई कुंजी नहीं है, इसलिए यह जेनरेट की गई वस्तुओं से अनुपस्थित है। पंक्ति चेतावनी आपको बताती है कि नुकसान संभव है। एक सार्थक शून्य नीति के रूप में पढ़ने की अनुपस्थिति के बजाय डाउनलोड से पहले हेडर या पंक्ति की चौड़ाई ठीक करें।
ToolAcre खाली स्ट्रिंग्स और वर्तमान कुंजियाँ उत्सर्जित करता है, शून्य या अनुपस्थित कुंजियाँ नहीं
हेडर ID, नोट, कोड और चार रिकॉर्ड का उपयोग करें: `1,,A`, `2,"",NULL`, `3,hello` और `4,world,B,extra`। पहले दो नोट खाली तार बन जाते हैं; पंक्ति दो में कोड "NULL" रहता है। पंक्ति तीन को पैडिंग के बाद कोड "" प्राप्त होता है, जबकि पंक्ति चार चेतावनी देती है कि अतिरिक्त सेल में कोई कुंजी नहीं है।
परिणामी वस्तुओं में स्पष्ट रूप से दर्शाए गए स्तंभों के लिए समान तीन कुंजियाँ होती हैं। यह काम किया गया मामला रिक्त कोशिकाओं के स्क्रीनशॉट की तुलना में अधिक जानकारीपूर्ण है क्योंकि यह पार्स चेतावनियों को JSON आकार से जोड़ता है। यह यह भी दिखाता है कि शाब्दिक टोकन को एक अलग डोमेन निर्णय की आवश्यकता क्यों है।
इसमें क्या शामिल नहीं है - एक लापता मूल्य के लिए डिफ़ॉल्ट क्या होना चाहिए, इसके लिए आरोप और व्यावसायिक नियम
आरोपण मार्ग के बाहर है. कन्वर्टर गायब कीमतों को नहीं भरता है, पिछले मूल्यों की प्रतिलिपि नहीं बनाता है या पड़ोसी पंक्तियों से डिफ़ॉल्ट का अनुमान नहीं लगाता है। वे परिवर्तन व्यावसायिक अर्थ पर निर्भर करते हैं और स्कीमा द्वारा अज्ञात, अनुपयुक्त और जानबूझकर खाली मानों को अलग करने के बाद घटित होने चाहिए।
यह एक गैर-उद्धृत खाली फ़ील्ड और `""` के बीच वाक्यविन्यास भेद को संरक्षित नहीं करता है; दोनों एक ही सेल स्ट्रिंग पर पार्स करते हैं। यदि वह अंतर मायने रखता है, तो CSV इसे इस पार्सर के तालिका मॉडल के माध्यम से नहीं ले जा रहा है। एक स्पष्ट स्थिति वाला प्रतिनिधित्व चुनें या व्युत्पन्न डेटा के साथ कच्चे स्रोत को संरक्षित करें।
लोड करने से पहले तय करें कि रिक्त का क्या अर्थ है - ToolAcre CSV क्लीनर का CSV-से-JSON रूपांतरण प्रतिनिधित्व को कैसे दृश्यमान बनाता है
JSON को टाइप किए गए कोड में लोड करने से पहले तय करें कि रिक्त का क्या अर्थ है। ToolAcre एक पारदर्शी आधार रेखा देता है: हर जगह स्ट्रिंग मान, गायब प्रदर्शित कोशिकाओं के लिए खाली स्ट्रिंग, शाब्दिक प्रहरी शब्द अपरिवर्तित और चेतावनी जहां पंक्ति का आकार उपलब्ध कुंजियों से अधिक है।
उन चेतावनियों का निरीक्षण करें और बाद में किसी भी तरह की जबरदस्ती का दस्तावेजीकरण करें। एक कन्वर्टर अकेले पाठ से लुप्त-मूल्य शब्दार्थ नहीं बना सकता है, लेकिन यह अपनी पसंद को छिपाने से बच सकता है। वह पूर्वानुमेय व्यवहार अगली सीमा को उस नीति के लिए जिम्मेदार बनाता है जिसे लागू करने के लिए वह वास्तव में योग्य है।