我目前使用 Vim 阅读 SO's data dump .但是,当我只滚动几行时,我的 Macbook 速度变慢了。这表明我必须有更有效的方法来读取数据。
我对 MySQL 知之甚少。这些文件采用 .xml 格式。目前很难读取 .xml 中的数据。将 xml 文件转换为 MySQL 然后读取文件可能更有效。我只知道用于此类操作的 MS db -tool。不过,我也想知道另一种工具。
问题
- 将 .xml 解析为 SQL 查询,以便 MySQL 能够理解它。 我们需要了解数据的数据结构。
- 运行MySQL中的数据
- 找到一些类似于MS db-tool的工具,通过它我们可以有效地读取数据
如何有效读取 SO 的数据转储?
--
[编辑]
- 如何运行 523 SQL queries在您的终端中创建数据库? 我现在在文本文件中有命令。
- 如何在数据库中“切换到 [恢复模式] 到简单恢复模式?”
最佳答案
我编写了我的第一个 python 程序来读取它们并输出用于 mysql 的 SQL 插入语句(它很丑但有效)。您需要先手动创建表格。
import xml.sax.handler
import xml.sax
import sys
class SOHandler(xml.sax.handler.ContentHandler):
def __init__(self):
self.errParse = 0
def startElement(self, name, attributes):
if name != "row":
self.table = name;
self.outFile = open(name+".sql","w")
self.errfile = open(name+".err","w")
else:
skip = 0
currentRow = u"insert into "+self.table+"("
for attr in attributes.keys():
currentRow += str(attr) + ","
currentRow = currentRow[:-1]
currentRow += u") values ("
for attr in attributes.keys():
try:
currentRow += u'"{0}",'.format(attributes[attr].replace('\\','\\\\').replace('"', '\\"').replace("'", "\\'"))
except UnicodeEncodeError:
self.errParse += 1;
skip = 1;
self.errfile.write(currentRow)
if skip != 1:
currentRow = currentRow[:-1]
currentRow += u");"
#print len(attributes.keys())
self.outFile.write(currentRow.encode("utf-8"))
self.outFile.write("\n")
self.outFile.flush()
print currentRow.encode("utf-8");
def characters(self, data):
pass
def endElement(self, name):
pass
if len(sys.argv) < 2:
print "Give me an xml file argument!"
sys.exit(1)
parser = xml.sax.make_parser()
handler = SOHandler()
parser.setContentHandler(handler)
parser.parse(sys.argv[1])
print handler.errParse
关于mysql - 有效读取 SO 的数据转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1146470/