Рубрики
Без рубрики

Запуск сервера AWS MySQL и импорт данных из csv-файлов (бесплатно!)

Руководство по импорту данных из csv-файлов в AWS RDS.

Автор оригинала: Michael Du.

Поскольку значительная часть моей когорты решила работать с тем же набором данных из Kaggle, я решил перенести его на сервер MySQL на AWS, чтобы:

  1. Я мог бы воспользоваться бесплатными сервисами уровня AWS на RDS (для размещения различных баз данных SQL), чтобы разместить свои данные и запустить запрос и
  2. У меня есть общая конечная точка, которая может позволить нескольким пользователям получить доступ к базе данных в любое время

Я пошел с движком MySQL по привычке, но это будет работать и для других движков (таких как PostgreSQL/SQLite). Вам просто нужно настроить некоторые из приведенных ниже шагов.

  1. На панели мониторинга AWS на вкладке Сервисы нажмите кнопку RDS .
  1. На следующей странице нажмите на Экземпляры на боковой панели, затем Запустите экземпляр БД.
  1. Выберите предпочитаемый движок, но убедитесь, что установите флажок ниже , где написано “Включить только параметры, подходящие для уровня бесплатного использования RDS” , и нажмите Далее . (Если вы не балер, в этом случае вам следует следовать моему отдельному руководству, где я рассказываю о том, как жить как настоящий балер).
  1. На следующей странице прокрутите страницу до раздела Настройки , оставив остальное нетронутым, если вы не знаете, что делаете. Другие варианты в основном не отображаются, если вы выбрали опцию бесплатного уровня.

В поле Идентификатор экземпляра БД введите имя этого экземпляра базы данных. Это не имя базы данных, в которой хранятся ваши таблицы. Это весь экземпляр вашего сервера, на котором будут храниться несколько баз данных. В этом случае я называю его metis db instance , потому что я планирую хранить несколько баз данных для разных проектов. Установите основное имя пользователя и пароль комбинацию, которая будет использоваться для входа на ваш сервер. Этим именем пользователя/паролем можно поделиться с другими, но позже вы можете создать дополнительных пользователей с различными уровнями разрешений. ДАЛЕЕ

  1. В следующем окне первое, на что вы хотите обратить внимание, – это Сеть и безопасность.

Виртуальное частное облако: Выберите VPC по умолчанию .

VPC-это облачный сервер, на котором размещаются ваши службы. Всем учетным записям AWS выделен VPC по умолчанию, и если вы уже использовали другие их сервисы (например, запуск сервера EC2, как мы делали в классе), он, скорее всего, уже работает в том же VPC по умолчанию.

Подсеть : Снова выберите по умолчанию . Это подсегмент вашего VPC (сегментированный по диапазонам IP — адресов) Общедоступность: Короткий ответ – Да . Длинный ответ, если вы хотите быть более безопасным, вы можете сделать это частным, и в этом случае только службы (такие как ваш сервер EC2), работающие в том же VPC (все внутри облака на диаграмме выше) могут взаимодействовать с ним. Поскольку мы уже настроили EC2 раньше, наши ноутбуки Jupyter, которые мы запускаем внутри этого сервера, могут подключаться к нему. Однако это означает, что вы не можете поделиться своей базой данных с кем-либо еще за пределами вашего VPC, в том числе с вашего персонального компьютера. Зона доступности: Нет предпочтений Параметры безопасности VPC: Создать новый

  1. В разделе Параметры базы данных

Имя базы данных: Это имя вашей базы данных. В моем случае я назвал его instacartdb , потому что именно там я буду хранить все данные Instacart из Kaggle.

Порт: 3306 является портом по умолчанию для баз данных MySQL. Давайте так и оставим.

Оставьте все остальное как есть и в нижней части нажмите Запустить экземпляр БД. На следующей странице нажмите Просмотреть экземпляр БД. Поздравляю, вы создали базу данных SQL в облаке! Но еще одно..

Прокрутите страницу вниз и в разделе Группы безопасности выберите группу безопасности, которая была прикреплена к вашему RDS.

На следующей странице нажмите на вкладку Входящие внизу, а затем редактировать .

Этот шаг позволит вам настроить, какие IP-адреса разрешены для подключения к вашей базе данных. Это особенно важно, если ваша база данных была общедоступна на предыдущем шаге, поскольку вы хотите ограничить, какие IP-адреса могут получить доступ к общедоступной конечной точке.

В моем случае, однако, у меня есть общедоступные данные, которыми я хочу поделиться с кем угодно, поэтому я меняю IP-адрес источника на 0.0.0.0/0 , что в основном дает доступ друзьям И врагам.

Как правило, вы хотите сделать это более безопасным, потому что, даже если он защищен паролем, вы все равно подвержены хакерским/DDOS-атакам. Поскольку я нахожусь на бесплатном уровне, сервер автоматически отключится, если он подвергнется DDOS-атаке, но в противном случае можно понести дорогостоящий счет, если кто-то решит переполнить ваш сервер запросами.

Нажмите кнопку Сохранить .

Наконец, вернитесь на страницу экземпляра вашего сервера RDS и найдите конечную точку . Если он еще не появился, это потому, что ваш экземпляр все еще инициализируется. Дайте ему еще несколько минут, и он должен появиться.

Этот URL-адрес-это то, как ваша точка доступа к базе данных.

Подключение к базе данных

В вашем терминале давайте установим все необходимые зависимости.

pip install -c anaconda mysql-connector-pythonpip install mysql-connector

Далее в вашем ноутбуке Jupyter мы импортируем зависимости

import pandas as pd
import mysql.connector
from sqlalchemy import create_engine

Далее мы хотим установить соединение с базой данных. Замените все значения в скобках фактическими значениями. Помните, что ПОРТ 3306 .

engine = create_engine(
'mysql+mysqlconnector://[USERNAME]:[[PASSWORD]@[](mailto:pokemon1@metisdbinstance.cyjtcanl7pse.us-west-2.rds.amazonaws.com)URL_ENDPOINT]:[PORT]/[DATABASE_NAME]', echo=False)

Затем мы хотим создать таблицу с соответствующими именами столбцов, типом и индексом. Убедитесь, что имена столбцов точно совпадают с заголовками столбцов в ваших CSV-файлах, иначе вы можете столкнуться с некоторыми проблемами. Кроме того, обратите внимание, что я установил aisle_id в качестве первичного ключа. Это важно для индексации, когда вы СОЕДИНЯЕТЕ таблицы.

query = '''
CREATE TABLE `instacartdb`.`aisles` (
  `aisle_id` INT NOT NULL,
  `aisle` INT(11) NULL DEFAULT NULL,
  PRIMARY KEY (`aisle_id`),
  UNIQUE INDEX `aisle_id_UNIQUE` (`aisle_id` ASC));
'''
# Open engine connection
con = engine.connect()

# Perform query: rs
rs = con.execute(query)

В приведенном выше примере у меня есть только один дополнительный столбец помимо первичного ключа, но у меня есть пример более сложной таблицы ниже:

CREATE TABLE `instacartdb`.`products` (
  `product_id` INT NOT NULL,
  `product_name` VARCHAR(300) NULL DEFAULT NULL,
  `aisle_id` INT(11) NULL DEFAULT NULL,
  `department_id` INT(11) NULL DEFAULT NULL,
  PRIMARY KEY (`product_id`),
  UNIQUE INDEX `product_id_UNIQUE` (`product_id` ASC));

Примечание product_name – это длинное строковое имя, поэтому оно задается как VARCHAR(300) , что означает, что это строка длиной до 300 символов. Если вы установите слишком низкое значение, и ваш набор данных будет иметь значение, превышающее эту длину, данные будут усечены. Это не приведет к ошибке, но создаст предупреждение, чтобы вы знали.

Затем мы хотим импортировать csv-файл в виде фрейма данных pandas.

data = pd.read_csv('./PATH/TO/YOUR/FILENAME.csv')

Наконец, если фрейм данных и таблица SQL выровнены, следующая строка импортирует CSV в базу данных в виде имени таблицы проходы .

data.to_sql(name='aisles', con=engine, if_exists = 'replace', index=False)

Промойте и повторите эти шаги с таким количеством CSV-файлов, как у вас есть, и это все! Ваш набор данных готов к работе!