Справка по MS Access для преобразования MySQL (гигантская таблица) - PullRequest
5 голосов
/ 08 августа 2011

Итак, у меня есть эта гигантская таблица, содержащая около 7 миллионов записей, в MS Access (* .mdb), я хочу перевести ее в гораздо более работоспособный формат MySQL и сохранить ее на своем веб-сервере. Сам файл весит 2ГБ.

Проблема в том, что, поскольку таблица такая большая, она не позволяет мне нормально ее экспортировать (Access сообщает, что ограничение составляет 65 536 записей.)

Я пробовал какое-то стороннее программное обеспечение, но безрезультатно.

Кто-нибудь может порекомендовать чистый способ сделать это, не повредив данные внутри?

Заранее спасибо за любую помощь.

Ответы [ 4 ]

8 голосов
/ 12 августа 2011

Установите драйвер ODBC для MySQL, если у вас его еще нет. Последняя версия доступна здесь: Скачать Connector / ODBC

Создайте DSN (имя источника данных) для вашего сервера MySQL от администратора источника данных ODBC Windows.

Затем в Access 2003 выберите вашу таблицу в окне базы данных и выберите «Файл» -> «Экспорт из Access» в главном меню. В диалоговом окне «Экспорт таблицы» yourtablename «Кому ...» выберите «Базы данных ODBC ()» в раскрывающемся списке «Сохранить как тип» (в нижней части диалогового окна). В следующем диалоговом окне вы можете указать имя, которое MySQL будет использовать для экспортируемой таблицы, и по умолчанию используется имя таблицы Access. После того, как вы нажмете OK, вы получите другое диалоговое окно «Выбор источника данных», где вы можете выбрать свой DSN для MySQL. После того, как вы нажмете OK в этом диалоговом окне, вы, вероятно, получите еще один запрос на ввод имени пользователя и пароля. Поставьте их и нажмите ОК.

Надеюсь, ваша таблица будет перенесена без ошибок. Тем не менее, я никогда не делал эту операцию с MySQL. У меня это работало с передачей ODBC на SQL Server и PostGreSQL. Поэтому я не понимаю, почему это не сработает и с MySQL.

Также я никогда не пытался экспортировать 7 миллионов записей за один раз. Если это задохнется, мы должны найти обходной путь.

Если вы используете Access 2007 вместо 2003, найдите похожую опцию, начиная с раздела «Экспорт» на ленте.

Я предложил этот подход, потому что у меня сложилось впечатление, что этот экспорт будет разовым, поэтому я думаю, что метод экспорта из Access UI будет самым простым. Тем не менее, вы можете выполнить практически ту же операцию с кодом VBA, используя метод DoCmd.TransferDatabase с вашим ODBC DSN.

Еще одна альтернатива - создать совместимую структуру таблиц в MySQL, создать ссылку в Access на таблицу назначения MySQL (снова используя DSN), а затем выполнить «запрос на добавление» из Access:

INSERT INTO link_to_mysql_table (field1, field2, field3, etc)
SELECT field1, field2, field3, etc
FROM access_table;

Подход запроса на добавление может быть полезен в случае, если экспорт блокирует 7 миллионов записей. Вы можете добавить предложение WHERE, чтобы ограничить выходную запись запроса SELECT установленным размером чанка, а затем повторить с другим WHERE, чтобы указать другой чанк.

1 голос
/ 12 августа 2011

Я бы использовал pyodbc, как описано в

http://en.wikibooks.org/wiki/Python_Programming/Database_Programming

скачать Python 2.7 из http://python.org/ скачать http://code.google.com/p/pyodbc/

измените следующий коэффициент для установки myfile.mdb и MyTable в соответствии с таблицей и файлом

сохранить код в файле translate.py

import csv
mycsv = csv.writer(open('result.csv', 'wb'), delimiter=',',
                    quotechar='"', quoting=csv.QUOTE_MINIMAL)
import pyodbc

DBfile = 'myfile.mdb'
conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+DBfile)
cursor = conn.cursor()

SQL = 'SELECT * FROM MyTable;'
for row in cursor.execute(SQL): # cursors are iterable
    mycsv.writerow(row)

cursor.close()
conn.close()

пробег python translate.py

1 голос
/ 09 августа 2011

Это 7 миллионов стоимости после компактного + ремонта? Я имею в виду, что если каждая запись имеет длину около 120 символов, вы можете уместить 32 миллиона записей в 2 гигабайта.

Кроме того, я не знаю ограничения на экспорт 65 000 записей, но только в отношении Excel.

Таким образом, вы можете / должны иметь возможность экспортировать данные в CSV, а затем использовать массовый текстовый импорт в mySql для извлечения этих данных. Итак, попробуйте экспортировать таблицу как CSV. Это должно сработать.

Я имею в виду, вы можете связать таблицу через odbc, если у вас хорошее локальное соединение с сервером sql, но если нет, то я бы экспортировал в csv (это ОЧЕНЬ быстро). Я тогда архивировал бы файл (они проникают фантастически). Загрузите файл на сервер и разархивируйте, а затем используйте массовый импорт текста. Таким образом, такой заархивированный файл ОЧЕНЬ мал и сэкономит огромное количество времени на передачу.

Вы также можете рассмотреть возможность использования табуляции с разделителями, поскольку mySql также может импортировать их, но простой текстовый файл должен работать очень хорошо.

0 голосов
/ 15 августа 2011

Установите MySQL в вашей собственной системе и увеличьте его до размера, а не пытайтесь использовать ваш локальный сервер.Затем выполните запрос на добавление из MySQL к экземпляру сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...