将英语维基百科转储导入SQL Server

我已经从here下载了最新的英语维基百科转储(enwiki-latest-pages-articles-multistream.xml),并且正在尝试将其导入SQL Server 2018。

我看不到XML文件,因为它的重量超过75 GB,因此我不知道在使用Bulk XML之前应该创建哪种表。

我该怎么做?我可以在 Python C#上编写一些脚本。预先感谢!

iCMS 回答:将英语维基百科转储导入SQL Server

使用以下内容

用于创建数据库的SQL查询

Create Database Feed
;
GO

USE [Feed]
drop table Doc
drop table Links
;
GO

CREATE TABLE [dbo].[Doc](
   DocID int primary key,Title [varchar](50) NULL,URL [varchar](50) NULL,Abstract [varchar](50) NULL
)

CREATE TABLE Links(
   DocID int,LinkType [varchar](10) NULL,Anchor [varchar](50) NULL,Link [varchar](50) NULL
   CONSTRAINT FK_DocID FOREIGN KEY (DocID)
        REFERENCES dbo.Doc (DocID)
)

c#代码从xml填充数据库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;
using System.Data.SqlClient;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        const string CONNECTION_STRING = @"Server=.\SQLEXPRESS;Database=Feed;Trusted_Connection=True;";
        const string INSERT_DOC =
            "INSERT INTO [Feed].[dbo].[Doc] (" +
            "DocID,Title,URL,Abstract)" +
            " VALUES " +
            "(@DocID,@Title,@URL,@Abstract)";
        const string INSERT_LINK =
            "INSERT INTO [Feed].[dbo].[Links] (" +
            "DocID,LinkType,Anchor,Link)" +
            " VALUES " +
            "(@DocID,@Linktype,@Anchor,@Link)";

        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection(CONNECTION_STRING);
            conn.Open();

            SqlCommand docCmd = new SqlCommand(INSERT_DOC,conn);

            docCmd.Parameters.Add("@DocID",SqlDbType.Int);
            docCmd.Parameters.Add("@Title",SqlDbType.VarChar,50);
            docCmd.Parameters.Add("@URL",50);
            docCmd.Parameters.Add("@Abstract",50);

            SqlCommand linksCmd = new SqlCommand(INSERT_LINK,conn);

            linksCmd.Parameters.Add("@DocID",SqlDbType.Int);
            linksCmd.Parameters.Add("@LinkType",10);
            linksCmd.Parameters.Add("@Anchor",50);
            linksCmd.Parameters.Add("@Link",50);

            XmlReader reader = XmlReader.Create(FILENAME);
            int id = 0;
            while (!reader.EOF)
            {
                if (reader.Name != "doc")
                {
                    reader.ReadToFollowing("doc");
                }
                if (!reader.EOF)
                {
                    XElement doc = (XElement)XElement.ReadFrom(reader);
                    id++;

                    docCmd.Parameters["@DocID"].Value = id;
                    docCmd.Parameters["@Title"].Value = (string)doc.Element("title");
                    docCmd.Parameters["@URL"].Value = (string)doc.Element("url");
                    docCmd.Parameters["@Abstract"].Value = (string)doc.Element("abstract");
                    int docRowsChanged = docCmd.ExecuteNonQuery();

                    foreach (XElement sublink in doc.Descendants("sublink"))
                    {
                        linksCmd.Parameters["@DocID"].Value = id;
                        linksCmd.Parameters["@LinkType"].Value = (string)sublink.Attribute("linktype");
                        linksCmd.Parameters["@Anchor"].Value = (string)sublink.Element("anchor");
                        linksCmd.Parameters["@Link"].Value = (string)sublink.Element("link");
                        int linksRowsChanged = linksCmd.ExecuteNonQuery();
                    }

                }
            }
        }
    }
}
,

处理此问题的最佳方法是创建一个MediaWiki实例并将XML转储导入该实例,然后使MediaWiki创建一个SQL数据库,然后将其用于其他用途。

您可以通过从https://mediawiki.org/wiki/Download下载MediaWiki来实现。如果您确实需要使用Microsoft SQL Server,建议您下载MediaWiki 1.31.8(最新的LTS),因为MSSQL Server支持已在1.34中删除(请参见https://www.mediawiki.org/wiki/Manual:Microsoft_SQL_Server)。

一旦MediaWiki服务器启动并运行,您需要运行导入脚本。最好的方法是将XML文件复制到运行Wiki的服务器上,然后从MediaWiki根目录运行php maintenance/importDump.php /path/to/dumpfile(如果您的MediaWiki在/var/www/html/mw中运行,则cd到该目录,然后运行脚本),请参见https://www.mediawiki.org/wiki/Manual:Importing_XML_dumps

希望这会有所帮助!

本文链接:https://www.f2er.com/2026293.html

大家都在问