Импорт данных из файла .csv

Runa

Администратор
#1
Для получения данных из внешних источников в конструкторе Руна служит инструмент импорта из текстового файла с расширением .csv. Данный файл можно получить в самых популярных офисных приложениях: MS Excel, OpenOffice/LibreOffice Calc и других, задав при сохранении файла соответствующий тип.
Сохранение файла csv в Excel.png Сохранение файла csv в Calc.png
Замечание: название файла "CSV (разделители - запятые) (*.csv)" объясняется тем, что в США в качестве разделителя полей в строке используется запятая, тогда как для России используется точка с запятой.
Разделителем данных в файле .csv служит символ, который определяется в настройках системы ("Панель управления"-"Язык и региональные стандарты"-вкладка "Форматы"-кнопка "Дополнительные форматы"-вкладка "Числа"-свойство "Разделитель элементов списка"). При необходимости, в конструкторе можно переопределить разделитель, задав другое значение в файле .ini для параметра "Se" (сепаратор).

Импорт/экспорт данных возможен только в объекте, в режиме монопольного (индивидуального) доступа, при выключенном сетевом доступе к проекту. При многопользовательской работе эти операции автоматически отключаются, блокируя пользователям возможность получения из базы данных большого объёма данных несанкционированным способом.

Для корректного распознавания текста, файл .csv должен быть сохранён в одной из кодировок, список которых определяется для каждого установленного в конструкторе языка. По умолчанию, при импорте из файла, будет предлагаться универсальная кодировка для всех языков UTF-8. Но так как некоторые программы сохраняют данные в национальной кодировке (например для русского языка Excel по умолчанию задаёт Windows-1251), то при импорте, возможно, придётся выбрать соответствующую кодировку. Несмотря на то, что в конструкторе предопределены основные кодировки для каждого языка, при отсутствии необходимой, потребуется преобразовать содержимое файла импорта в одну из требуемых кодировок - например в UTF-8. Это можно сделать при помощи различных текстовых редакторов, например Notepad++ ("Кодировки"-"Преобразовать в UTF-8").

Соответствие столбцов данных в файле и полей в объекте определяется по заголовку, которым служит первая строка файла импорта. Совпадение должно быть абсолютно точным с учётом регистра. В противном случае столбец с данными не будет обрабатываться. Для быстрого получения списка полей в шапке, в объекте конструктора можно произвести экспорт в файл .csv и из полученного файла извлечь названия заголовков. Порядок столбцов в файле импорта не имеет значения - все данные будут приведены к порядку, заданному в объекте.

Разные программы, при сохранении данных в файл .csv, некоторые поля могут заключать в двойные кавычки (при наличии в поле пробела или символа разделителя), а двойные кавычки дублировать. При просмотре файла в текстовом редакторе, на это можно не обращать внимания, так как при импорте в программе, всё служебное оформление будет убрано.

При наличии в объекте полей ссылок на другие объекты, в этих объектах будут созданы записи с соответствующими ключевыми полями (если их не было), а в самом объекте будут добавлены ссылки на вновь созданные (или существующие) записи. Поэтому при импорте данных для нескольких связанных таблиц, последовательность проведения данной операции не имеет значения: после создания записей в другом объекте, в него можно произвести импорт остальной информации, указав в параметре импорта "Действие" значение "заменить" записи с повторяющимся первым полем.

Приведём пример импорта в базу данных кросс кодов автомобильных запчастей (информация размещена в Интернете в свободном доступе). На основании структуры файла .csv, в котором имеются необходимые данные, подготовим структуру проекта, где объекты "Запчасть" и "Бренд" содержат только по одному строковому полю названия.
Файл csv с данными для импорта.png Структура проекта для импорта.png
В данном примере необходимо заменить существующие заголовки столбцов в файле. Это можно сделать вручную, но для больших списков удобнее упростить процесс во избежание ошибок. Производится экспорт пустого объекта в файл .csv, из которого извлекается шапка. Так как столбцы в файле имеют ту же последовательность, что и в объекте, шапка в импортируемом файле копируется без изменения.
Экспорт объекта для получения шапки заголовков.png Получение заголовков полей в шапке файла.png Замена шапки в импортируемом файле.png
Другой вариант: при нескольких файлах импорта, именовать поля в объекте оригинальными названиями из файлов .csv, а затем переименовать в удобочитаемые.

В объекте проекта выполняем операцию импорта и выбираем файл для импорта данных. В окне предварительного просмотра импортируемых данных отображаются первые 100 записей из файла, которые позволяют определить корректность кодировки и соответствие столбцов с данными полям в объекте.
Выполнение импорта из файла csv.png Предварительный просмотр импортируемых данных.png
Свойство "Действие" в окне настройки импорта влияет на способ добавления записей в базу, определяемому по первому (ключевому) полю:
- "пропустить": если ключевое поле есть в базе, то импорт записи пропускается;
- "заменить": если ключевое поле есть в базе, то запись в базе заменяется на данные из файла импорта;
- "не проверять": проверка существования дублей в базе не производится.
При импорте с первым и вторым условием, каждая строка файла проверяется на повтор в базе, что может значительно замедлить процесс импорта. Для быстрого выполнения операции, когда известно, что все записи уникальны, желательно установить свойство "Действие" в значение "не проверять".

При большом числе записей импорт может длиться до нескольких минут (на старых компьютерах).
Процесс импорта данных из файла csv в базу данных.png
Для проверки работы с большим объёмом данных, произведём импорт из 40 файлов с общим числом записей более 40 миллионов.
База данных с 40 млн записей.png
В объекты "Запчасть" и "Бренд" автоматически добавлены записи, на которые производится ссылка из основного объекта "Кросс коды".
Объект запчастей.png Объект брендов.png
Объект с данными открывается за несколько секунд, а поиск записей при помощи фильтра из 40 миллионов записей производится около минуты.

Рекомендация: при импорте большого числа записей - предварительно создать архив проекта. В случае необходимости это позволит вернуться к исходному варианту базы данных.

См. также:
- Импорт данных в дочерний список из файла Excel
 
Последнее редактирование модератором: