Загрузчик данных таблиц из файлов CSV в базу данных Postgres. Реализованы многопоточность и разделение данных на чанки для обработки.
- Убедитесь, что у вас установлен Python 3.7 или новее.
- Клонируйте репозиторий.
- Установите необходимые зависимости:
pip install -r requirements.txt
Для работы скрипта необходимы переменные окружения:
SRC_PATH
для каталога с CSV файлами источников.
DB_USERNAME
- логин;DB_PASSWORD
- пароль;DB_HOST
- адрес;DB_PORT
- порт;DB_NAME
- имя.
Также в директории с файлами источников необходим файл с описаниями схем таблиц schemas.json. Описание схем необходимо скрипту, чтобы получить имена полей для таблиц.
Для загрузки данных запустите скрипт run.py с опциональными аргументами:
python run.py --tables 'categories, customers, departments' --chunks 10000
Где:
--tables
- список таблиц для обработки. Если пусто - обрабатывает все файлы в каталоге источников;--chunks
- количество чанков. Если пусто - нет разделения на чанки.
В директории data\retail_db представлены примеры CSV файлов, а также файл с описаниями схем таблиц schemas.json. Для корректной работы конвертера убедитесь, что структура ваших CSV файлов и файла схем соответствует приведенным примерам.
CSV файлы представлены в формате, где каждая строка содержит запись, а каждая запись разделена запятыми. Например, файл CSV с названием departments.csv может выглядеть следующим образом:
2,Fitness
3,Footwear
4,Apparel
...
Здесь:
- первое значение в строке (перед запятой) представляет собой идентификатор отдела (
department_id
); - второе значение в строке (после запятой) представляет собой название отдела (
department_name
).
Файл схемы, schemas.json
, определяет структуру и формат данных в CSV файлах. Файл содержит отдельные определения для каждой таблицы (например, departments, categories и т. д.).
Пример структуры для таблицы departments:
{
"departments": [
{
"column_name": "department_id",
"data_type": "integer",
"column_position": 1
},
{
"column_name": "department_name",
"data_type": "string",
"column_position": 2
}
]
}
Здесь:
- column_name - название колонки;
- data_type - тип данных колонки (integer, string и т. д.);
- column_position - позиция колонки в CSV файле (начиная с 1).
Для каждой таблицы (например, departments, categories) необходимы отдельные определения, определяющие структуру и формат соответствующих CSV файлов.