Импорт и экспорт данных: COPY, LOAD DATA INFILE, IMPORT/EXPORT

Зачем нужен импорт и экспорт данных? 📦

Работа с базами данных — это не только запросы и аналитика. Часто нам нужно:

  • Переносить данные между системами (например, из CSV в PostgreSQL)
  • Делать бэкапы
  • Интегрироваться с другими сервисами
  • Обрабатывать большие массивы данных из внешних файлов

Сегодня разберём три мощных инструмента для этих задач!


COPY — скоростной магистральный канал 🚀

COPY — это стандартная команда SQL для быстрого импорта/экспорта данных. Работает в PostgreSQL и других СУБД.

Экспорт данных в CSV

COPY sales TO '/path/to/sales.csv' WITH CSV HEADER;
  • sales — таблица для экспорта
  • WITH CSV — формат файла
  • HEADER — включить заголовки столбцов

Импорт данных из CSV

COPY customers FROM '/path/to/customers.csv' WITH CSV HEADER;

Важно: Файл должен быть доступен серверу БД, а не только вашему локальному компьютеру!

Плюсы COPY:

✔️ Очень высокая скорость
✔️ Поддержка бинарного формата для максимальной производительности
✔️ Гибкие настройки формата


LOAD DATA INFILE — тяжелая артиллерия MySQL 💣

Эксклюзивный инструмент MySQL для загрузки больших файлов.

Базовый пример:

LOAD DATA INFILE '/path/to/products.txt'
INTO TABLE products
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n';
  • Читает данные из текстового файла
  • Автоматически определяет структуру (или использует указанную)
  • Поддерживает сложные форматы

Оптимизация для больших файлов:

LOAD DATA INFILE '/large/file.csv'
INTO TABLE analytics
CHARACTER SET utf8mb4
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES -- пропустить заголовок
(column1, column2, @dummy) -- маппинг столбцов
SET date_loaded = NOW(); -- дополнительные вычисления

IMPORT/EXPORT — кроссплатформенное решение 🌐

Многие СУБД предлагают свои варианты этих команд:

В SQLite:

-- Экспорт
.headers on
.mode csv
.output data.csv
SELECT * FROM users;

В Oracle:

-- Импорт через SQL*Loader
OPTIONS (SKIP=1) -- пропустить первую строку
LOAD DATA
INFILE 'data.dat'
BADFILE 'bad_rows.bad'
APPEND
INTO TABLE employees
FIELDS TERMINATED BY ","
(emp_id, emp_name, salary)

Лайфхаки для профессионалов 🔥

  1. Пакетная обработка: Для огромных файлов разбивайте импорт на части по 10-50k строк
  2. Валидация: Добавляйте временные CHECK-ограничения при импорте
  3. Логирование: Создайте таблицу-журнал для отслеживания импортов

Пример журналирования:

BEGIN;
CREATE TEMP TABLE import_log (ts timestamp, rows_affected int);
COPY data FROM '/file.csv' WITH CSV;
INSERT INTO import_log VALUES (NOW(), (SELECT COUNT(*) FROM data));
COMMIT;

Что выбрать для вашей задачи? 🤔

Инструмент Лучше всего подходит для...
COPY Быстрого переноса между PostgreSQL и CSV
LOAD DATA INFILE Обработки огромных файлов в MySQL
IMPORT/EXPORT Работы со специфичными форматами СУБД

Помните: всегда проверяйте кодировку файлов (UTF-8 — ваш друг) и экранирование специальных символов!


Ваш следующий шаг ▶️

Попробуйте прямо сейчас:

  1. Экспортируйте любую таблицу в CSV через COPY
  2. Измените данные в текстовом редакторе
  3. Импортируйте обратно с добавлением нового столбца

Как говорил Данила Бежин в своих лекциях: "Настоящее понимание приходит только с практикой!"

Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео