Чтобы эффективно читать дамп данных SO
В настоящее время я использую Vim для чтения дампа данных SO. Тем не менее, мой Macbook замедляется, когда я скатываюсь только на несколько рядов. Это наводит меня на мысль, что должны быть более эффективные способы чтения данных.
Я немного знаю MySQL. Файлы находятся в формате.xml. На данный момент довольно сложно прочитать данные в формате.xml. Может быть более эффективно преобразовать xml -файлы в MySQL и затем прочитать файлы. Я знаю только MS db -tool для таких действий. Тем не менее, я хотел бы знать и другой инструмент.
Проблемы
- проанализировать.xml в SQL -запросах, чтобы MySQL это понимал. Нам нужно знать структуры данных данных.
- запустить данные в MySQL
- найти инструмент, похожий на MS db -tool, с помощью которого мы можем эффективно читать данные
Как эффективно читать дамп данных SO?
-
[редактировать]
- Как вы можете выполнить 523 SQL -запроса для создания базы данных в вашем терминале? У меня есть команды на данный момент в текстовом файле.
- Как вы можете "переключиться в [режим восстановления] в простой режим восстановления в базе данных?
1 ответ
Я создал свою первую программу на Python, которая их читала и выводила операторы вставки SQL для использования с mysql (это уродливо, но сработало). Сначала вам нужно будет создать таблицы вручную.
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