Быстрый импорт в базу данных с помощью DBeaver
Сегодня расскажу про небольшой лайфхак о том, как можно быстро загрузить вашу дату в базу данных используя минимум кодинга. Но сначала опишем суть проблемы, которую данный лайфхак решает. Итак, у нас есть некая дата, которая хранится во внешних файлах (например, в csv). Нам нужно загрузить дату в базу данных (далее БД), причем в самой БД нет таблиц предназначенных для загрузки.
Делаем по старинке
Классическим решением будет провести анализ содержимого таблиц, выписать названия полей и их формат. Затем создать с помощью SQL запроса сами таблицы. Это будет выглядеть примерно вот так:
А затем нужно будет сформировать INSERT запрос для каждой строки файла для вставки его в БД. Если в вашем файле 30 тысяч строк, то придется писать запрос для каждой строки. Здесь без Excel или Google Sheets не обойтись. Так как используется инструментарий таблиц для работы со строками можно ускорить процесс создания тела INSERT запроса. Итоговый запрос может выглядеть вот так:
Остается только подключиться к БД и запустить SQL запросы. В этом репозитарии на Гитхабе можно посмотреть на полный код самих запросов.
А что если вот совсем не хочется возиться с Excel и прописывать формулу для сцепки полей? А если в таблице 50-150 полей? Есть решение!
DBeaver приходит на помощь
Воспользуемся функцией импорта данных в БД, которая появилась в версии 7.2.1
Перед тем как заливать дату, все таки придется создать таблицу-приёмник хотя бы с 1 полем (пусть это будет тот же id c типом serial). Вот таким запросом:
Дальше выбираем сам файл.
В настройках импорта можно уточнить тип разделителя полей, формат отображения дат и кодировку (я все оставил по дефолту).
Теперь самое интересное. На шаге соответствия столбцов можно детально выбрать, куда какая информация будет копироваться. Для пустых таблиц будет предложен вариант create. Для таблиц, в которые уже была тестовая загрузка, или в которых структура была создана заранее, будет указано existing. А если вы хотите пропустить импорт определенного столбца, укажите skip, и DBeaver его пропустит.
На шаге параметров импорта можно включить опцию очистки существующих данных перед импортом (если вы тренировались и уже что-то в нее загружали), а также я рекомендую включить галочку "Выполнять Commit после вставки строк N" Где N -это шаг, через который будет выводится сообщение о статусе импорта. Так вы будете понимать примерно где сейчас импорт. Это актуально для больших таблиц размером от миллиона строк. Для таких больших таблиц удобный шаг - 100 000.
Затем переходим в окно подтверждения настроек и нажимаем старт.
Сразу после этого начнется импорт.
Скорость импорта зависит от размера файла-источника и удаленности таблицы-приемника. Мой импорт 0,5-миллиона строчек в облако Amazon занял примерно 10 минут.
спасибо, было полезно!
ОтветитьУдалитьПри импорте таблицы подобным способом можно выбрать тип данных для каждого столбца импортируемого CSV файла
Удалить