Предлагаемые способы импорта различных файлов с разделителями канала в БД на основе таблицы буферов с использованием php / mysql? - PullRequest
2 голосов
/ 14 декабря 2009

Я пытаюсь импортировать различные файлы с разделителями каналов, используя php 5.2, в базу данных mysql. Я импортирую различные форматы данных по конвейеру, и моя конечная цель - попытаться поместить разные данные в надлежащим образом нормализованную структуру данных, но мне необходимо выполнить некоторую постобработку данных, чтобы правильно вставить их в мою модель.

Я подумал, что лучший способ сделать это - импортировать в таблицу с именем buffer и отобразить данные, а затем импортировать в различные таблицы. Я планирую создать таблицу, называемую просто «буфер», с полями, представляющими каждый столбец (их будет до 80), а затем применить некоторые преобразования / сопоставление данных, чтобы получить ее в нужной таблице.

Мой запланированный подход заключается в создании базового класса, который в общем случае считывает данные канала в буферную таблицу, а затем расширяет этот класс, имея функцию, которая содержит различные подготовленные операторы для выполнения магии SQL, что позволяет мне гибко проверять формат то же самое, прочитав заголовки в первом ряду и изменив его для одного формата.

Мои вопросы:

  1. Каков наилучший способ сделать первый шаг чтения данных из локального файла, сохраненного в таблице? Я не слишком уверен, должен ли я использовать LOAD DATA mysql (как предложено в Наилучшая практика: импортировать CSV в базу данных MYSQL с использованием PHP 5.x ) или просто fopen, а затем вставлять данные построчно.

  2. это лучший подход? Как другие люди подходят к этому?

  3. Есть ли в структуре дзэн что-нибудь, что может помочь?

Дополнительно: я планирую сделать это в запланированном задании.

Ответы [ 4 ]

2 голосов
/ 14 декабря 2009

Вам не нужен PHP-код для этого, IMO. Не трать время на занятия. Предложение MySQL LOAD DATA INFILE предоставляет множество способов импорта данных для 95% ваших потребностей. Какие бы разделители, какие столбцы пропустить / выбрать. Внимательно прочитайте руководство, стоит знать, что вы МОЖЕТЕ сделать с ним. После импорта данных, оно может быть уже в хорошей форме, если вы правильно напишите запрос. Буферная таблица может быть временной. Затем нормализуйте или денормализуйте его и удалите исходную таблицу. Сохраните сценарий в файле, чтобы воспроизвести последовательность сценариев в случае ошибки.

Лучший способ - написать сценарий SQL, проверить, в конечном итоге, находятся ли данные в надлежащей форме, найти ошибки, изменить, повторно запустить сценарий. Если данных много, проведите тестирование на меньшем наборе строк.

[добавлено] Другая причина подхода sql-главным образом заключается в том, что если вы не владеете SQL, но собираетесь работать с базой данных, лучше изучить SQL раньше. Позже вы найдете много вариантов его использования и избежите распространенных ошибок программистов, которые знают это поверхностно.

1 голос
/ 22 марта 2013

Я лично использую бесплатное программное обеспечение ETL Kettle от Pentaho (этот бит программного обеспечения обычно называют чайником). Хотя это программное обеспечение далеко от совершенства, я обнаружил, что я часто могу импортировать данные за долю времени, которое мне пришлось бы потратить на написание сценария для одного конкретного файла. Вы можете выбрать ввод текстового файла и указать разделители, фиксированную ширину и т. Д., А затем просто экспортировать их прямо на ваш SQL-сервер (они поддерживают MySql, SQLite, Oracle и многие другие).

0 голосов
/ 07 октября 2010

В конце концов, я использовал dataload И изменил это http://codingpad.maryspad.com/2007/09/24/converting-csv-to-sql-using-php/ для различных ситуаций.

0 голосов
/ 14 декабря 2009

Есть десятки и десятки способов. Если у вас есть локальная файловая система, доступ к экземпляру MySQL, ЗАГРУЗИТЕ ДАННЫЕ. В противном случае вы можете также легко преобразовать каждую строку в SQL (или строку VALUES) для периодической отправки в MySQL через PHP.

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