2016-06-30 1 views
12

Я работаю над проектом, связанным с обработкой большого объема документов XBRL (> 1 м отдельных файлов). Я совершенно не знаком с XBRL и чувствую себя совершенно потерянным на данный момент.Как импортировать данные XBRL в MySQL?

У меня есть данные, относящиеся к этим документам XBRL в отдельной базе данных MySQL, и я хотел бы добавить данные XBRL в MySQL, чтобы хранить все в одном db.

Каковы наилучшие методы переноса данных из документов XBRL в MySQL?

Существуют ли библиотеки для массового производства?

Я искал учебники по этим вопросам, но не смог найти ничего, обеспечивающего базовое введение, просто много информации высокого уровня.

+0

Я не думаю, что есть какие-либо, я пытался сделать то же самое о два года назад, кроме места назначения, был SQL Server. Какие типы файлов у вас есть? –

+0

Вместо баз данных SQL для баз данных NoSql с точки зрения производительности и масштабируемости –

ответ

7

Естественная парадигма в теории хранения XBRL в базе данных будет OLAP, поскольку XBRL - это кубы данных. OLAP поверх реляционной базы данных будет называться ROLAP.

Это не тривиальная проблема, поскольку факты, взятые из большого числа таксономий, могут образовывать очень большой и разреженный куб (для заявок SEC - это размеры 10k +), а также потому, что для создания схемы SQL требуется знание таксономий до Импортировать. Если появятся новые таксономии, нужно снова пересмотреть ETL. Это не делает реляционные базы данных подходящими в качестве общего решения.

Если заявки имеют одинаковую таксономию, и таксономия очень проста, хотя (как и в случае: не слишком много измерений), можно создать ad-hoc-карту для хранения всех фактов в одной таблице со многими строки в смысле ROLAP (факты для строк, аспекты для столбцов). Некоторые поставщики специализируются на хранении нестандартных фактов XBRL, и в этом случае традиционные SQL (или «пост-SQL», которые масштабируются с помощью рядов), работают хорошо.

Некоторые производители создают таблицу для каждого гиперкабеля XBRL в таксономии со схемой, полученной из сети определения, но различной для каждого гиперкуба. Это может привести к большому количеству таблиц в базе данных и требует большого количества объединений для запросов с участием нескольких гиперкубов.

Некоторые другие поставщики делают предположения о базовой структуре XBRL или о типах запросов, которые должны выполнять их пользователи. Ограничение объема проблемы позволяет найти определенные архитектуры или схемы SQL, которые также могут выполнять работу для этих конкретных потребностей.

Чтобы импортировать большое количество заявок (например, все заявки SEC), мы (мой работодатель) построили generic mapping поверх хранилищ данных NoSQL, а не реляционных баз данных. Большое количество фактов с различным количеством измерений вписывается в большие коллекции полуструктурированных документов, а сети хорошо вписываются в иерархический формат.

2

Прежде всего вам нужно понять, что документы XBRL (экземпляров) содержат много разных типов информации. Например: он может содержать ежедневную информацию о ценах для инвестиционных фондов, а также ежеквартальные отчеты по НДС или информацию о кредитоспособности. XBRL - это стандартный способ общения, но содержание имеет свои собственные (стандартизованные XBRL) таксономии. Например: существует голландская таксономия, на которой строится голландское агентство по доходам (с его собственной таксономией), по которому существует конкретная таксономия для подачи отчетов об НДС. Эти таксономии определяются с использованием XSD, Xlink и linkbase. Подумайте об этом как о концепции Dictionairy: способ создания диктовки везде одинаковый (используйте каждую букву алфавита, чтобы сделать «главы», сортировать слова в алфавитном порядке и т. Д. И т. Д.), Но греческое словосочетание использует свой собственный алфавит, его собственные слова и собственный язык для объяснения содержания.

Таким образом, если вы используете только один или несколько разных типов документов XBRL (которые используют одни и те же таксономии), вы можете создать сопоставление от этих таксономий к своим (базам данных) объектам. Если у вас более широкий диапазон таксономий, вам придется создать более общее решение, которое может «импортировать» таксономии. Это будет довольно сложной задачей (именно поэтому на рынке мало доступных инструментов).

Если вы (r компания) можете себе это позволить, я рекомендую изучить существующие tools, как Altova's MapForce. Таким образом, нет необходимости изучать XBRL, XSD, Xlink и linkbase только для того, чтобы начать разработку собственного инструмента для анализа этих файлов, вы можете использовать существующие продукты для сопоставления таксономий XBRL с вашей базой данных/приложением.

+0

Знаете ли вы, поддерживает ли MapForce iXBRL, используя [Companies House (UK)] (http://download.companieshouse.gov.uk/en_accountsdata.html) ? –

+1

iXBRL - встроенный XBRL, который в основном представляет собой HTML-файл, содержащий данные XBRL, создающий человекообразный документ с теми же данными, что и в «сыром» XBRL.Когда я смотрю на вашу ссылку, она предлагает данные в обоих форматах. Как правило, iXBRL создается путем применения шаблона (часто XSLT) к файлу XBRL. Что касается вашего вопроса: MapForce не предназначен для работы с iXBRL ... Но быстрый просмотр их сайта показывает, что у Altova есть инструменты для обработки iXBRL: StyleVision, инструмент их отчетности. – DdW

+0

Благодарим вас за ответ. Я обнаружил, что только около 1% файлов предлагаются как XBRL (.xml), а остальные находятся в iXBRL (.html), и поэтому MapForce не смог обработать большинство из них. Я мог бы увидеть, может ли StyleVision читать iXBRL и выводить на необработанный XBRL, чтобы MapForce мог его прочитать, хотя я надеялся, что смогу найти один инструмент для этого. –

2

Надеюсь, вы знаете, что MySQL - это структурированное хранилище данных, тогда как XBRL - это просто представление для преобразования бизнес-документа в цифровой формат. XBRL - это документ на основе XML, который подразумевает, что он неструктурирован, а данные, которые вам требуются из документа, могут или не могут встречаться в этом конкретном документе. Он также может содержать любую другую дополнительную информацию. XSD определяет способ структурирования XML и сколько раз может иметь место любой тег. Теперь, чтобы ответить на ваш вопрос, вы можете использовать eXistDB, который я также использовал в прошлом для хранения документа XBRL. Однако время от времени оно может быть медленным. Если вам нужны только некоторые данные из XBRL и им нужно хранить в базе данных MySQL, вы можете использовать XPATH. В следующем простом коде Python вы можете получить значения EquityTotalEndingBalance и ReservesTotalEndingBalance от 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 

Этот код выведет значения:

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

Так как вы можете решить вашу проблему, то?

  1. Либо вы должны выбрать на основе хранения XML-документ NoSQL как eXistDB и писать Xpath, чтобы получить конкретные данные.

  2. Вы можете вручную проанализировать документ XBRL, как указано выше, и немедленно запустить 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() ", namespaces = nsmap)'. Это просто вернет '37216000000''. Надеюсь это поможет. Пожалуйста, примите ответ, если это сработает для вас. Спасибо, – Pant

+0

Благодарим вас за ответ. Вы знаете, как это сделать динамически? Я пытаюсь обработать ~ 6000 файлов, где контекст не известен мне. –