2016-06-30 8 views
12

मैं एक परियोजना पर काम कर रहा हूं जिसमें एक्सबीआरएल दस्तावेजों की एक बड़ी मात्रा (> 1 एम अलग फाइलें) संसाधित करना शामिल है। मैं एक्सबीआरएल के लिए बिल्कुल नया हूं और इस समय काफी हद तक महसूस कर रहा हूं।MySQL पर XBRL डेटा कैसे आयात करें?

मेरे पास एक अलग MySQL डेटाबेस में उन XBRL दस्तावेज़ों से संबंधित डेटा है और मैं एक डीबी में सबकुछ स्टोर करने के लिए एक्सबीआरएल डेटा को MySQL में जोड़ना चाहता हूं।

एक्सबीआरएल दस्तावेज़ों से डेटा को MySQL में स्थानांतरित करने के लिए सबसे अच्छी विधियां क्या हैं?

क्या इसके लिए कोई थोक प्रसंस्करण पुस्तकालय उपलब्ध है?

मैं उन मुद्दों पर ट्यूटोरियल ढूंढ रहा हूं लेकिन बुनियादी परिचय प्रदान करने में कुछ भी नहीं मिला, केवल उच्च स्तर की जानकारी।

+0

मुझे नहीं लगता कि किसी भी है है, मैं के बारे में एक ही बात करने का प्रयास कर रहा है दो साल पहले गंतव्य को छोड़कर एसक्यूएल सर्वर था। आपके पास किस प्रकार की फाइलें हैं? –

+0

एसक्यूएल डेटाबेस के बजाय प्रदर्शन और स्केलेबिलिटी परिप्रेक्ष्य –

उत्तर

7

डेटाबेस में एक्सबीआरएल स्टोर करने के सिद्धांत में प्राकृतिक प्रतिमान ओलाप होगा, क्योंकि एक्सबीआरएल डेटा क्यूब के बारे में है। एक संबंधपरक डेटाबेस के शीर्ष पर ओलाप को रोलप कहा जाएगा।

यह एक छोटी सी समस्या नहीं है, क्योंकि बड़ी संख्या में टैक्सोनोमी से लिया गया तथ्य एक बहुत बड़ा और स्पैस क्यूब (एसईसी फाइलिंग के लिए 10k + आयामों के लिए) बना सकता है, और यह भी कि एसक्यूएल स्कीमा बनाने के कारण किसी भी से पहले टैक्सोनोमी जानना आवश्यक है आयात। यदि नए टैक्सोनोमी आते हैं, तो किसी को सब कुछ फिर से ईटीएल की जरूरत होती है। यह एक सामान्य समाधान के रूप में उपयुक्त संबंधपरक डेटाबेस नहीं बनाता है।

यदि फाइलिंग समान वर्गीकरण साझा करती है और वर्गीकरण बहुत सरल है (जैसा कि: बहुत अधिक आयाम नहीं हैं), तो कई तथ्यों को एक ही तालिका में स्टोर करने के लिए विज्ञापन-प्रसार मैपिंग के साथ आना संभव है रोलप भावना में पंक्तियां (पंक्तियों के तथ्यों, स्तंभों के पहलुओं)। कुछ विक्रेता गैर-आयामी एक्सबीआरएल तथ्यों को संग्रहीत करने में विशिष्ट होते हैं, इस मामले में पारंपरिक एसक्यूएल (या "पोस्ट-एसक्यूएल" जो पंक्तियों के साथ स्केल करते हैं) प्रसाद अच्छी तरह से काम करते हैं।

कुछ विक्रेता परिभाषा नेटवर्क से प्राप्त एक स्कीमा के साथ वर्गीकरण में प्रत्येक एक्सबीआरएल हाइपरक्यूब के लिए एक टेबल बनाते हैं, लेकिन प्रत्येक हाइपरक्यूब के लिए अलग-अलग होते हैं। इससे डेटाबेस में बहुत सी टेबल हो सकती हैं, और कई हाइपरक्यूब से जुड़े प्रश्नों के लिए बहुत से जुड़ने की आवश्यकता होती है।

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

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

2

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

तो यदि आप केवल एक या कुछ अलग-अलग प्रकार के एक्सबीआरएल दस्तावेजों (जो समान टैक्सोनोमी साझा करते हैं) का उपयोग करते हैं, तो आप इन टैक्सोनोमीज़ से अपने स्वयं के (डेटाबेस) ऑब्जेक्ट्स में मैपिंग बना सकते हैं। यदि आपके पास टैक्सोनोमी की विस्तृत श्रृंखला है, तो आपको एक अधिक सामान्य समाधान बनाना होगा जो टैक्सोनोमी आयात कर सकता है। यह काफी चुनौती होगी (यही कारण है कि बाजार पर कई टूल उपलब्ध नहीं हैं)।

यदि आप (आर कंपनी) इसे बर्दाश्त कर सकते हैं, तो मैं मौजूदा tools जैसे Altova's MapForce की तलाश करने की अनुशंसा करता हूं। इस तरह से इन फ़ाइलों को पार्स करने के लिए अपने स्वयं के टूल को विकसित करना शुरू करने के लिए एक्सबीआरएल, एक्सएसडी, एक्सलिंक और लिंकबेस सीखने की कोई आवश्यकता नहीं है, आप एक्सबीआरएल टैक्सोनोमी को अपने डेटाबेस/एप्लिकेशन में मैप करने के लिए मौजूदा उत्पादों का लाभ उठा सकते हैं।

+0

से नोएसक्ल डेटाबेस के लिए जाएं, क्या आपको पता है कि मैपफोर्स आईएक्सबीआरएल का समर्थन करता है, [कंपनियों हाउस (यूके)] द्वारा उपयोग में (http://download.companieshouse.gov.uk/en_accountsdata.html) ? –

+1

iXBRL इनलाइन एक्सबीआरएल है, जो मूल रूप से एक HTML फ़ाइल है जिसमें एक्सबीआरएल डेटा होता है, जो 'कच्चे' एक्सबीआरएल में मौजूद सटीक डेटा के मानव पठनीय दस्तावेज़ का निर्माण करता है।जब मैं आपका लिंक देखता हूं, तो यह दोनों प्रारूपों में डेटा प्रदान करता है। आम तौर पर, एक आईएक्सबीआरएल एक्सबीआरएल फ़ाइल में एक टेम्पलेट (अक्सर एक एक्सएसएलटी) लागू करके बनाया जाता है। आपके प्रश्न के अनुसार: MapForce iXBRL के साथ काम करने के लिए नहीं है ... लेकिन उनकी साइट के त्वरित स्कीम से पता चलता है कि Altova में IXBRL को संभालने के लिए टूल हैं: स्टाइलविजन, उनके रिपोर्टिंग टूल। – DdW

+0

आपके उत्तर के लिए धन्यवाद। मुझे पता चला है कि एक्सबीआरएल (.xml) के रूप में केवल 1% फ़ाइलों की पेशकश की जाती है और बाकी आईएक्सबीआरएल (। एचटीएमएल) में हैं और इसलिए मैपफोर्स उनमें से अधिकांश को संसाधित करने में असमर्थ था। मैं देख सकता हूं कि स्टाइलविजन आईएक्सबीआरएल पढ़ने और कच्चे एक्सबीआरएल को आउटपुट करने में सक्षम है ताकि मैपफ़ोर्स इसे पढ़ सके, हालांकि मुझे उम्मीद थी कि मैं इसे करने के लिए एक टूल ढूंढ सकता हूं। –

2

मुझे आशा है कि आप जानते हैं कि MySQL एक संरचित डेटा संग्रहण है जबकि XBRL व्यवसाय प्रारूप को डिजिटल प्रारूप में मानचित्रित करने का एक प्रतिनिधित्व है। XBRLXML आधारित दस्तावेज़ है, जिसका अर्थ है कि यह असंरचित है और दस्तावेज़ से आपको आवश्यक डेटा उस विशिष्ट दस्तावेज़ में हो सकता है या नहीं हो सकता है। इसमें कोई अन्य अतिरिक्त जानकारी भी हो सकती है। XSD परिभाषित करता है कि XML को कैसे संरचित किया जा सकता है और कितनी बार कोई टैग हो सकता है। अब अपने प्रश्न का उत्तर देने के लिए, आप eXistDB का उपयोग कर सकते हैं, जिसे मैंने पहले भी एक्सबीआरएल दस्तावेज़ को स्टोर करने के लिए उपयोग किया था। हालांकि, यह कई बार धीमा हो सकता है। यदि आपको XBRL से कुछ डेटा की आवश्यकता है और इसे MySQL डेटाबेस में स्टोर करने की आवश्यकता है तो आप XPATH का उपयोग कर सकते हैं। निम्नलिखित सरल पायथन कोड में, आप EquityTotalEndingBalance और ReservesTotalEndingBalance के मान this document से मान सकते हैं।

['37216000000', '36862000000', '42245000000'] 
['35903000000', '35558000000', '40971000000'] 

तो आप तो अपनी समस्या को हल कर सकते हैं:

from lxml import etree 
root = etree.fromstring(open("file.xml").read()) 
nsmap = root.nsmap 
nsmap.pop(None) # There was some error without this. 
data_one = root.xpath("//iascf-pfs:EquityTotalEndingBalance/text()",namespaces=nsmap) 
data_two = root.xpath("//novartis:ReservesTotalEndingBalance/text()",namespaces=nsmap) 
print data_one 
print data_two 

इस कोड मूल्यों प्रिंट होगा?

  1. या तो आप eXistDB की तरह एक NoSQL आधारित XML दस्तावेज़ भंडारण चुनें और xPath बारे में विशेष रूप से डेटा प्राप्त करने के लिए होगा।

  2. आप उपरोक्त जैसे एक्सबीआरएल दस्तावेज़ मैन्युअल रूप से पार्स कर सकते हैं और XPath को सीधे फायर कर सकते हैं और डेटा स्टोर कर सकते हैं।

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

+0

क्या यह विधि अलग-अलग 'contextRef' का समर्थन कर सकती है? (उन्हें मैन्युअल रूप से परिभाषित किए बिना) मैंने कुछ संदर्भ 'contextRef = "current-mud" देखा है और अन्य' contextRef = "cfwd_31_12_2014" 'या' contextRef = "FY1" 'और मैं प्राप्त करना चाहता हूं वर्तमान/सबसे हालिया मूल्य। –

+0

हां यह संभव है। विशेषता का समर्थन करने के लिए आपको xpath को संशोधित करना होगा। मान लें कि आप ' 37216000000 '। इस मामले में xpath 'data_one = root.xpath (" // iascf-pfs: EquityTotalEndingBalance [@ numericContext = 'Group1999AsOf']/text() ", नेमस्पेस = nsmap) होगा। यह सिर्फ '37216000000 'वापस आ जाएगा। उम्मीद है की यह मदद करेगा। अगर यह आपके लिए काम करता है तो कृपया उत्तर स्वीकार करें। धन्यवाद, – Pant

+0

आपके उत्तर के लिए धन्यवाद। क्या आप जानते हैं कि यह गतिशील तरीके से कैसे करें? मैं ~ 6,000 फाइलों को संसाधित करने की कोशिश कर रहा हूं जहां संदर्भ मेरे लिए अनजान है। –

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