2016-06-30 19 views
12

Pracuję nad projektem obejmującym przetwarzanie dużej ilości dokumentów XBRL (> 1m oddzielnych plików). Jestem całkowicie nowym użytkownikiem XBRL i obecnie czuję się zagubiony.Jak zaimportować dane XBRL do MySQL?

Mam dane odnoszące się do tych dokumentów XBRL w osobnej bazie danych MySQL i chciałbym dodać dane XBRL do MySQL do przechowywania wszystkiego w jednym db.

Jakie są najlepsze metody przesyłania danych z dokumentów XBRL do MySQL?

Czy są dostępne dla niego biblioteki przetwarzania zbiorczego?

Szukałem samouczków dotyczących tych zagadnień, ale nie znalazłem niczego, co dawałoby podstawowe wprowadzenie, a jedynie wiele informacji na wysokim poziomie.

+0

Nie sądzę, nie ma w ogóle, ja starałem się zrobić to samo o dwa lata temu, z wyjątkiem przeznaczenia było SQL Server. Jakie typy plików posiadasz? –

+0

Zamiast baz danych SQL przejdź do baz danych NoSql z wydajności i skalowalności perpektywy –

Odpowiedz

7

Naturalnym paradygmatem teoretycznym do przechowywania XBRL w bazie danych byłby OLAP, ponieważ XBRL dotyczy kostek danych. OLAP na relacyjnej bazie danych miałby nazwę ROLAP.

To nie jest banalny problem, ponieważ fakty zaczerpnięte z dużej liczby taksonomii mogą tworzyć bardzo duży i rzadki sześcian (dla dokumentów SEC to 10k + wymiary), a także dlatego, że tworzenie schematu SQL wymaga znajomości taksonomii przed import. Jeśli pojawią się nowe taksonomie, trzeba wszystko powtórzyć ETL. Nie powoduje to, że relacyjne bazy danych są odpowiednie jako ogólne rozwiązanie.

Jeśli opiłki mają tę samą taksonomię, a systematyka jest bardzo prosta (jak w: niezbyt wiele wymiarów), możliwe jest wymyślenie mapowania ad-hoc w celu przechowywania wszystkich faktów w jednej tabeli z wieloma wiersze w sensie ROLAP (fakty do wierszy, aspekty do kolumn). Niektórzy dostawcy specjalizują się w przechowywaniu niezwymiarowych faktów XBRL, w którym to przypadku tradycyjne oferty SQL (lub "post-SQL", które skalują się z wierszami) działają dobrze.

Niektórzy dostawcy tworzą tabelę dla każdego hipersześcianu XBRL w taksonomii, ze schematem pochodzącym z sieci definicji, ale różnym dla każdego hipersześcianu. Może to prowadzić do wielu tabel w bazie danych i wymaga wielu sprzężeń w przypadku zapytań obejmujących wiele hipersześci.

Niektórzy inni dostawcy przyjmują założenia dotyczące podstawowej struktury XBRL lub rodzaju zapytań, które muszą wykonać użytkownicy. Ograniczenie zakresu problemu pozwala na znalezienie specyficznych architektur lub schematów SQL, które również mogą spełnić te specyficzne potrzeby.

Aby zaimportować duże ilości dokumentów (np. Wszystkie dokumenty składane w SEC), my (mój pracodawca) stworzyliśmy generic mapping zamiast baz danych NoSQL zamiast baz danych. Duża liczba faktów o różnej liczbie wymiarów mieści się w dużych kolekcjach częściowo ustrukturyzowanych dokumentów, a sieci dobrze pasują do hierarchicznego formatu.

2

Najpierw należy zdać sobie sprawę, że dokumenty XBRL (wystąpienia) zawierają wiele różnych typów informacji. Na przykład: może zawierać codzienne informacje o cenach dla funduszy inwestycyjnych, ale także kwartalne raporty VAT lub informacje o wiarygodności kredytowej. XBRL jest standardowym sposobem komunikowania się, ale zawartość ma własną (znormalizowaną przez XBRL) taksonomię. Na przykład: istnieje holenderska taksonomia, na której zbudowana jest holenderska agencja skarbowa (z własną taksonomią), na której istnieje szczególna taksonomia do składania raportów VAT. Te taksonomie są zdefiniowane za pomocą XSD, Xlink i linkbase. Pomyśl o tym jako o Dictionairy: sposób, w jaki konstruowane są dykamy, jest wszędzie taki sam (wykorzystuj każdą literę alfabetu do tworzenia "rozdziałów", sortuj słowa alfabetycznie itp.), Ale greckie dictionairy używa własnego alfabetu, własne słowa i własny język do wyjaśnienia treści.

Jeśli więc używasz tylko jednego lub kilku różnych typów dokumentów XBRL (które mają takie same taksonomie), możesz utworzyć mapowanie z tych taksonomii do własnych obiektów (bazy danych). Jeśli masz szerszy zakres taksonomii, musisz stworzyć bardziej ogólne rozwiązanie, które może "importować" taksonomie. To będzie sporym wyzwaniem (dlatego nie ma zbyt wielu narzędzi dostępnych na rynku).

Jeśli możesz sobie na to pozwolić (r firmy), polecam zaglądnąć do istniejącego tools, takiego jak Altova's MapForce. W ten sposób nie musisz uczyć się XBRL, XSD, Xlink i łącza, aby rozpocząć tworzenie własnego narzędzia do analizowania tych plików, możesz wykorzystać istniejące produkty do mapowania taksonomii XBRL do bazy danych/aplikacji.

+0

Czy wiesz, czy MapForce obsługuje iXBRL, w użyciu przez [Companies House (UK)] (http://download.companieshouse.gov.uk/en_accountsdata.html) ? –

+1

iXBRL jest wbudowanym XBRL, który jest w zasadzie plikiem HTML zawierającym dane XBRL, tworząc czytelny dla człowieka dokument zawierający te same dane, które są zawarte w "surowym" XBRL.Kiedy patrzę na twój link, oferuje dane w obu formatach. Zwykle tworzony jest iXBRL przez zastosowanie szablonu (często XSLT) do pliku XBRL. Co do twojego pytania: MapForce nie jest przeznaczony do pracy z iXBRL ... Ale szybki przegląd ich strony pokazuje, że Altova ma narzędzia do obsługi iXBRL: StyleVision, ich narzędzia do raportowania. – DdW

+0

Dziękuję za odpowiedź. Zauważyłem, że tylko około 1% plików jest oferowanych jako XBRL (.xml), a reszta to iXBRL (.html), więc MapForce nie był w stanie przetworzyć większości z nich. Mogę zobaczyć, czy StyleVision jest w stanie odczytać iXBRL i wyprowadzić na surowy XBRL, aby MapForce mógł go przeczytać, chociaż miałem nadzieję, że znajdę jedno narzędzie, które zrobi to wszystko. –

2

Mam nadzieję, że wiesz, że MySQL to strukturalne przechowywanie danych, podczas gdy XBRL jest po prostu reprezentacją, aby odwzorować dokument biznesowy na format cyfrowy. XBRL jest dokumentem opartym na XML, co oznacza, że ​​jest niestrukturalny, a dane, których wymagasz od dokumentu, mogą lub nie mogą wystąpić w tym konkretnym dokumencie. Może zawierać również inne dodatkowe informacje. XSD definiuje sposób, w jaki XML może być zbudowany i ile razy może wystąpić tag. Teraz, aby odpowiedzieć na twoje pytanie, możesz użyć eXistDB, którego również użyłem w przeszłości do przechowywania dokumentu XBRL. Jednak czasami może być powolny. Jeśli potrzebujesz tylko niektórych danych z XBRL i potrzebujesz ich do przechowywania w bazie danych MySQL, możesz użyć XPATH. W poniższym prostym kodzie Pythona można pobrać wartości EquityTotalEndingBalance i ReservesTotalEndingBalance z this document.

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 

Ten kod wypisze wartości:

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

Więc jak można rozwiązać problem wtedy?

  1. Albo trzeba by wybrać NoSQL oparciu przechowywanie dokumentów XML jak eXistDB i napisać XPath, aby uzyskać konkretne dane.

  2. Możesz ręcznie przeanalizować dokument XBRL, jak powyżej, i zwolnić XPath bezpośrednio i zapisać dane.

Złożoność pojawi się, jeśli zajdzie potrzeba skonsumowania wszystkich danych z wszelkiego rodzaju dokumentów. Więc musielibyście ograniczyć to, co będziecie spożywać z tych dokumentów.

+0

Czy ta metoda może obsługiwać różne 'contextRef'? (bez konieczności ręcznego definiowania ich) Widziałem pewne użycie 'contextRef =" current-mud "' a inne używają 'contextRef =" cfwd_31_12_2014 "' lub 'contextRef =" FY1 "' i chciałbym uzyskać aktualna/najnowsza wartość. –

+0

Tak, jest to możliwe. Będziesz musiał zmodyfikować xpath, aby obsługiwał atrybut. rozważ, że chcesz uzyskać wartość z ' 37216000000'. W tym przypadku xpath będzie "data_one = root.xpath (" // iascf-pfs: EquityTotalEndingBalance [@ numericContext = 'Group1999AsOf']/text() ", namespaces = nsmap)'. To po prostu zwróci '' 37216000000''. Mam nadzieję że to pomoże. Proszę przyjąć odpowiedź, jeśli to działa dla Ciebie. Dzięki, – Pant

+0

Dziękuję za odpowiedź. Czy wiesz, jak to zrobić dynamicznie? Próbuję przetworzyć ~ 6000 plików, w których kontekst nie jest mi znany. –

Powiązane problemy