Como converter os dados armazenados em arquivos XML em um banco de dados relacional (MySQL)?

Tenho alguns ficheiros XML que contêm dados para um projecto de investigação, sobre os quais preciso de fazer algumas estatísticas. A quantidade de dados está próxima de 100GB.

A estrutura não é tão complexa (pode ser mapeada para, talvez, 10 tabelas em um modelo relacional), e dada a natureza do problema, esses dados nunca serão atualizados novamente, eu só preciso de ti disponíveis em um lugar onde é fácil para executar consultas.

Li sobre bases de dados XML e a possibilidade de executar consultas ao estilo XPATH é para já, mas nunca os usei e não me sinto à vontade com isso. Ter os dados numa base de dados relacional seria a minha escolha preferida.

Então, estou à procura de uma forma de esconder os dados armazenados em XML numa base de dados relacional (pense num grande .ficheiro sql semelhante ao gerado por mysqldump, mas qualquer outra coisa faria). O objetivo final é ser capaz de executar consultas SQL para desbloquear os dados.

Depois de uma pesquisa, estou quase convencido de que tenho de a escrever sozinha. Mas sinto trata-se de um problema comum, pelo que deveria existir um instrumento que já o fizesse.

Então, conhece alguma ferramenta que transformasse dados XML numa base de dados relacional?

PS1:

a minha ideia seria algo do género (pode funcionar de forma diferente, mas só para ter a certeza que percebes o que quero dizer):

  1. Analisar a estrutura de dados (com base no próprio XML ou num XSD)
  2. construir a base de dados relacional (tabelas, chaves) com base nisso estrutura
  3. gerar declarações SQL para criar a base de Dados
  4. gerar declarações SQL para criar preencher os Dados

PS2:

Já vi alguns. posts Aqui Em SO but still I couldn't find a solution. A ferramenta "Xml Bulk Load" da Microsoft parece fazer algo nessa direcção, mas não tenho um servidor de MS SQL.

Author: Community, 2012-11-30

5 answers

As bases de dados não são a única forma de procurar dados. Eu posso recomendar muito Apache Solr

Mantenha os seus dados raw como XML e procure-os usando o índice Solr

 3
Author: Mark O'Connor, 2017-05-23 11:58:16

Importar ficheiros XML do formato correcto para uma base de dados MySql é fácil:

Https://dev.mysql.com/doc/refman/5.6/en/load-xml.html

Isto significa que, normalmente, tem de transformar os seus dados XML nesse tipo de formato. Como você faz isso depende da complexidade da transformação, que linguagens de programação você conhece, e se você quiser usar XSLT (que é provavelmente uma boa idéia).

Pelas tuas respostas anteriores, parece que conheces o Python, por isso ... http://xmlsoft.org/XSLT/python.html pode ser a coisa certa para começar.
 3
Author: Doc Brown, 2012-11-30 12:10:05

Dê uma olhada no StAX em vez de XSD para analisar/extrair dados. É baseado em stream e pode lidar com arquivos XML enormes.

 2
Author: ipbd, 2012-11-30 12:47:47
Se se sentir confortável com o Perl, tive muita sorte com o módulo XML::Twig para processar ficheiros XML muito grandes.

Basicamente, tudo o que você precisa é configurar alguns manipuladores de galhos e importar os seus dados para o MySQL usando DBI/DBD::mysql.

Há um bom exemplo em xmltwig.org.
 1
Author: mvp, 2012-11-30 11:35:26

Se você se sente confortável com produtos comerciais, você pode querer dar uma olhada em Assistente de dados para MySQL pelo grupo SQL Maestro.

Este pedido destina-se especialmente à exportação e, naturalmente, à importação de dados de/ para as bases de dados MySQL. Isto também inclui a importação em XML . Você pode baixar um teste de 30 dias para verificar se isso é o que você está procurando. Tenho de admitir que ainda não usei a linha de produtos MySQL deles, mas tinha um bom utilizador. experiência com seus produtos Firebird Maestro e SQLite Maestro.
 1
Author: Jens H, 2012-11-30 11:48:07