Итак, вы закончили курс Data Science, вы изучили Python, статистику, линейную алгебру, машинное обучение, глубокое обучение, вы осваиваете основные библиотеки для исследования данных, вы много практиковались с данными Kaggle, сделал отличное портфолио и получил работу специалиста по данным!
Вы очень взволнованы, когда приедете в первую неделю на работу, откройте файлы .csv или .xlsx с пандами и начните изучать данные! Но подождите…
«Где файлы .csv / .xlsx ???»
В настоящее время все компании хранят свои данные в структурированных или неструктурированных базах данных в облаке (AWS, Google Cloud, Azure), поэтому специалисту по данным важно владеть языками SQL и NoSQL для правильного извлечения информации из этих баз данных.
К сожалению, все, что было сказано в вашем курсе Data Science, касалось SQL, было простыми запросами, такими как знаменитый SELECT * FROM table
! Что ж, он действительно работает, но поверьте мне, когда вы будете работать с петабайтами информации вы не захотите импортировать две разные таблицы в merge
с помощью pandas (на самом деле, в зависимости от конфигурации вашего ПК вы не сможете это сделать).
По этой причине я решил написать эту статью с некоторыми советами по SQL, которые я изучил за последние 6 месяцев работы специалистом по данным.
1. Подзапросы (оператор Select с предложением where вызывает другой оператор Select)
Представьте, что вы работаете в зоомагазине и хотите знать имя, возраст и адрес всех клиентов, у которых есть собака, но информация о клиентах находится в таблице, а информация о домашних животных - в другой таблице. Вы можете перенести обе таблицы и объединить их с Python, но вы лучше этого! Вы можете использовать подзапрос для извлечения всех имен клиентов, у которых есть собака, из таблицы2, а затем используйте эти имена клиентов в качестве параметра предложения WHERE
для извлечения желаемой информации, как показано в примере ниже:
SELECT column_name, column_age, column_address FROM table1 WHERE column_name IN (SELECT column_name FROM table2 WHERE column_pet_type = 'dog') ORDER BY column_age DESC
Второй выбор извлекает имена всех клиентов, у которых есть собака, и использует эти имена в качестве параметров предложения WHERE
в первом SELECT
. Убедитесь, что оператор подзапроса SELECT
вернет один столбец, иначе первый оператор SELECT
не будет работать.
Таким образом, время, необходимое для извлечения информации из базы данных, будет быстрее, чем при извлечении всей информации и последующем объединении таблиц.
2. Временные таблицы
Временная таблица в SQL Server - это таблица базы данных, временно существующая на сервере. Он хранит подмножество данных из обычной таблицы в течение определенного периода времени. Рассмотрим пример:
Предположим, вам нужен идентификатор всех клиентов с определенным именем и определенным возрастом. К сожалению, в вашей таблице возраст не указан, но указана дата рождения. Вы можете преобразовать столбец даты рождения в возраст и сохранить эту информацию во временной таблице, а затем использовать эту временную таблицу в новом запросе.
SELECT column_id, column_name, DATEDIFF(hour, column_birth_date, GETDATE())/8766 AS Age INTO #TemporaryTable FROM table1 SELECT column_id FROM #TemporaryTable WHERE column_name = 'Daniel' AND Age = 33
В первой части запроса я преобразовываю столбец Birth_date в Age с помощью функции DATEDIFF
, а затем сохраняю информацию INTO #TemporaryTable.
Во второй части я использую созданную мной временную таблицу для запроса идентификатора столбца с определенным возрастом, извлеченным из временной таблицы .
3. Параметризованные запросы
параметризованный запрос (также известный как подготовленный оператор) - это средство предварительной компиляции оператора SQL, чтобы все, что вам нужно было предоставить, это «параметры», которые необходимо вставить в оператор для него. быть исполненным. Он обычно используется для предотвращения атак с использованием SQL-инъекций.
SQL-инъекции - это уязвимость веб-безопасности, которая позволяет злоумышленнику вмешиваться в запросы, которые приложение делает к своей базе данных. Обычно это позволяет злоумышленнику просматривать данные, которые они обычно не могут получить. Во многих случаях злоумышленник может изменить или удалить эти данные, вызывая постоянные изменения содержимого или поведения приложения.
В приведенном ниже примере я передаю в качестве параметра своему запросу «имя» и «возраст» синтаксис. используется для Microsoft Server SQL (%(parameter)s
), для других баз данных проверьте их документацию, чтобы увидеть правильный синтаксис.
import pandas as pd import pymssql query = """SELECT column_name, column_address, column_email, column_age FROM table1 WHERE column_name = %(name)s AND column_age = %(age)s""" conn = pymssql.connect(host, user, password, database) dataframe = pd.read_sql(query, conn, params = dict(name = 'Daniel', age = 33)) #Or if you execute the query using cursor cur = conn.cursor() cur.execute(query, params = dict(name = 'Daniel', age = 33))
Заключение
Если вы хотите улучшить производительность своего кода, углубиться в основы SQL, эта статья охватывает лишь очень небольшую часть того, что SQL может предоставить пользователям.
Надеюсь, вам понравилась статья и вы узнали что-то новое по ходу дела.
Если да, обязательно дайте мне знать в комментариях.