Skip to main content
CheckTown
Дані

CSV у SQL: Конвертуйте дані таблиць у SQL-інструкції INSERT

Опубліковано 6 хв читання
У цій статті

Що таке конвертація CSV у SQL?

Конвертація CSV у SQL перетворює табличні дані з файлу CSV (значення, розділені комами) в SQL-інструкції, які можуть створити таблицю бази даних та вставити дані. Цей процес включає аналіз імен стовпців, визначення типів даних, генерацію інструкції CREATE TABLE та побудову інструкцій INSERT для кожного рядка.

Ця конвертація з'єднує дані електронних таблиць та реляційні бази даних. Замість ручного написання SQL для кожного рядка даних, конвертер автоматизує трудомісткий процес визначення типів, екранування значень та форматування інструкцій — перетворюючи простий файл експорту в готові до виробництва команди бази даних.

Як працює CSV у SQL

Процес конвертації включає кілька кроків, кожен з яких обробляє різний аспект перетворення плоских текстових даних у структуровані команди бази даних.

  • Визначення типу стовпця — конвертер аналізує значення в кожному стовпці для визначення найкращого типу SQL: INTEGER для цілих чисел, FLOAT/DECIMAL для чисел з десятковою частиною, BOOLEAN для значень істина/хибність, DATE для рядків дат, та VARCHAR або TEXT для всього іншого
  • Генерація CREATE TABLE — використовуючи визначені типи та рядок заголовків CSV як імена стовпців, конвертер будує інструкцію CREATE TABLE з відповідними типами даних та обмеженнями
  • Побудова інструкцій INSERT — кожен рядок CSV стає інструкцією INSERT з правильно екранованими та взятими в лапки значеннями. Текстові значення обгортаються в одинарні лапки, NULL замінює порожні комірки, а спеціальні символи екрануються

Визначення типу працює шляхом тестування кожного значення за зразками: якщо кожне непорожнє значення в стовпці розпізнається як ціле число, тип стовпця — INT. Якщо вони розпізнаються як десяткові числа — FLOAT. Якщо значення відповідають шаблонам дати — DATE. За замовчуванням використовується VARCHAR з довжиною, встановленою за найдовшим значенням, або TEXT, якщо значення перевищують поріг.

Спробуйте безкоштовно — реєстрація не потрібна

Конвертувати CSV у SQL →

Відмінності діалектів SQL

SQL — це не одна мова: кожна система баз даних має свій власний діалект з різним синтаксисом для типів даних, лапок та масових операцій.

  • MySQL — використовує зворотні лапки для ідентифікаторів (`ім'я_стовпця`), AUTO_INCREMENT для послідовностей та підтримує багаторядковий синтаксис INSERT VALUES для ефективного масового завантаження
  • PostgreSQL — використовує подвійні лапки для ідентифікаторів ("ім'я_стовпця"), SERIAL/GENERATED для автоінкременту та підтримує COPY FROM для швидкого масового імпорту безпосередньо з CSV
  • SQLite — найбільш поблажливий діалект з гнучкою типізацією. Використовує подвійні лапки для ідентифікаторів, AUTOINCREMENT для таблиць rowid та зберігає всі дані як текст внутрішньо з правилами типової спорідненості
  • SQL Server — використовує квадратні дужки для ідентифікаторів ([ім'я_стовпця]), IDENTITY для автоінкременту та підтримує BULK INSERT для імпорту CSV файлів безпосередньо в таблиці

Поширені випадки використання

Конвертація CSV у SQL — це поширене завдання в управлінні даними, розробці та робочих процесах міграції.

  • Заповнення бази даних — заповнення баз розробки або стейджингу тестовими даними, експортованими з електронних таблиць або існуючих систем
  • Міграція даних — переміщення даних між системами, коли джерело підтримує лише експорт CSV, а ціль вимагає імпорту SQL
  • Імпорт електронних таблиць — бізнес-користувачі експортують дані з Excel або Google Sheets як CSV, а розробникам потрібно завантажити їх у базу даних
  • Створення тестових фікстур — генерація SQL-скриптів вставки з CSV файлів, що містять тестові сценарії для автоматизованого тестування
  • ETL-конвеєри — витягування даних як CSV з одного джерела, перетворення імен та типів стовпців та завантаження через SQL у цільову базу даних

Поради та найкращі практики

Дотримуйтесь цих практик, щоб уникнути поширених помилок при конвертації даних CSV в SQL-інструкції.

  • Екрануйте одинарні лапки — значення, що містять апострофи (O'Brien, it's), повинні мати подвоєні одинарні лапки (O''Brien) для запобігання SQL-ін'єкціям та синтаксичним помилкам
  • Обробляйте значення NULL — порожні комірки CSV повинні відображатися як NULL в SQL, а не як порожні рядки. Різниця має значення для запитів, агрегацій та обмежень
  • Використовуйте пакетні вставки для продуктивності — замість одного INSERT на рядок, групуйте рядки в багатозначні інструкції INSERT (100-1000 рядків на інструкцію) для значно швидшого завантаження
  • Перевіряйте типи стовпців — автоматичне визначення типів може помилятися. Перевірте згенеровану інструкцію CREATE TABLE та скоригуйте типи (особливо DATE vs VARCHAR) перед виконанням
  • Загортайте в транзакції — оточіть інструкції INSERT командами BEGIN/COMMIT для забезпечення атомарності. Якщо будь-яка вставка не вдасться, ви зможете відкотити весь пакет замість того, щоб мати неповні дані

Часті запитання

Як обробляти великі CSV файли з тисячами рядків?

Для великих файлів уникайте генерації одного INSERT на рядок. Використовуйте багаторядковий синтаксис INSERT (INSERT INTO таблиця VALUES (...), (...), (...)) з пакетами по 500-1000 рядків на інструкцію. Для дуже великих файлів (мільйони рядків) розгляньте використання нативного інструменту масового завантаження бази даних: LOAD DATA INFILE для MySQL, COPY для PostgreSQL або BULK INSERT для SQL Server.

А як щодо CSV файлів з різними кодуваннями?

CSV файли можуть використовувати UTF-8, Latin-1, Windows-1252 або інші кодування. Символи за межами ASCII (літери з акцентами, CJK-символи) можуть пошкодитися, якщо кодування невірне. Завжди перевіряйте кодування файлу перед конвертацією. Більшість сучасних інструментів за замовчуванням використовують UTF-8, але Excel на Windows часто створює файли в Windows-1252. Якщо сумніваєтесь, відкрийте файл у текстовому редакторі, що відображає кодування.

Чи потрібно додавати первинні ключі до згенерованої таблиці?

Якщо у вашому CSV є стовпець, що унікально ідентифікує кожен рядок (наприклад, ID), додайте обмеження PRIMARY KEY на нього. Якщо природного ключа немає, додайте стовпець з автоінкрементним ID. Первинні ключі необхідні для ефективного пошуку, JOIN-ів та цілісності даних. Без них база даних не може ефективно ідентифікувати окремі рядки для оновлення або видалення.

Пов'язані інструменти