Use sql: Основные команды SQL, которые должен знать каждый программист

Как использовать GPT в качестве естественного языка для механизма запросов SQL

Generative AI Insights

Шэрон Махлис,

исполнительный редактор отдела данных и аналитики,

ИнфоМир

|

О компании |

Технологические лидеры оценивают генеративный ИИ

Генеративный вывод ИИ не всегда надежен, но вот как можно улучшить код и запросы, созданные с помощью технологии, лежащей в основе ChatGPT, и предотвратить отправку конфиденциальных данных.

Олли / Shutterstock

Содержание

  • Генеративный ИИ для корпоративных запросов
  • Шаг 1. Превратите данные примера в строку из одного символа
  • Шаг 2: Создайте приглашение для LLM
  • Шаг 3. Отправьте данные в API OpenAI
  • Шаг 4. Выполните результаты кода SQL, возвращенного GPT
  • .

  • Шаг 5 (необязательно): Создайте интерактивное приложение

Показать больше

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

Как и в большинстве случаев генеративного ИИ, результаты API OpenAI все еще несовершенны, а это значит, что им нельзя просто доверять. К счастью, теперь вы можете написать код, чтобы спросить GPT , как будет вычислять ответ, а затем вы можете запустить код самостоятельно, если согласны с подходом. Это означает, что вы сможете задавать вопросы на естественном языке, например: «Каковы были общие продажи по регионам в прошлом году?» и быть уверенным в точности ответа.

Вот быстрый и грязный метод для настройки запроса на естественном языке вашей собственной базы данных с помощью GPT:

  1. Поместите структуру ваших данных, несколько образцов строк или и то, и другое в одну текстовую строку.
  2. Создайте «подсказку» для ИИ с этой информацией и вашим вопросом на естественном языке.
  3. Отправьте приглашение API OpenAI GPT-3.5-turbo и запросите SQL-запрос, чтобы ответить на ваш вопрос.
  4. Запустите SQL, который возвращается к вашему набору данных, чтобы рассчитать ответ.
  5. (Необязательно) Создайте интерактивное приложение, чтобы упростить запрос набора данных на простом английском языке.

Этот метод имеет несколько преимуществ при работе с реальными данными. Отправляя только данные , структуру и некоторые образцы строк (которые могут включать поддельные данные), нет необходимости отправлять настоящие конфиденциальные данные в OpenAI. Также не беспокойтесь, если ваши данные слишком велики для ограничений размера приглашений OpenAI. И, запрашивая SQL вместо окончательного ответа, возможность проверить, как GPT генерирует свой ответ, встроена в процесс.

Генеративный ИИ для корпоративных запросов

Если вы серьезно относитесь к использованию генеративного ИИ для разработки запросов корпоративного уровня, возможно, вы захотите изучить такие инструменты, как LangChain, фреймворк для работы с несколькими различными большими языковыми моделями (LLM), а не только GPT OpenAI. OpenAI также недавно объявила о возможности включения вызовов функций в запросы API, что направлено на то, чтобы сделать запросы и аналогичные задачи проще и надежнее. Но для быстрого прототипа или собственного использования описанный здесь процесс — это простой способ начать работу. Моя демонстрация выполняется с помощью R, но этот метод работает практически на любом языке программирования.

Шаг 1. Превратите данные примера в односимвольную строку

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

Если ваши данные уже находятся в базе данных SQL, этот шаг должен быть довольно простым. Если это не так, я предлагаю превратить его в формат SQL-запросов. Почему? После тестирования результатов кода R и SQL я больше уверен в коде SQL, который генерирует GPT, чем в его коде R. (Я подозреваю, что это потому, что в LLM было больше данных SQL, чем в R для обучения.)

В R пакет sqldf позволяет выполнять SQL-запросы к фрейму данных R, и это то, что я буду использовать в этом примере. В Python есть похожая библиотека sqldf. Для больших данных, где важна производительность, вы можете проверить проект duckdb.

Следующий код импортирует файл данных в R, использует sqldf , чтобы увидеть, как выглядела бы схема SQL, если бы фрейм данных был таблицей базы данных SQL, извлекает три выборки строк с помощью dplyr filter() и превращает строки схемы и выборки в строки символов. Отказ от ответственности: ChatGPT написал базовую часть кода R apply() , которая превращает данные в одну строку (обычно я выполняю эти задачи с муррр ).

библиотека (рио)
библиотека (dplyr)
библиотека (sqldf)
библиотека (клей)
состояния <- rio::import("https://raw.githubusercontent.com/smach/SampleData/main/states. csv") |>
  filter(!is.na(Регион))
States_schema <- sqldf("PRAGMA table_info(states)")
States_schema_string <- вставить (применить (states_schema, 1, вставить, свернуть = "\t"), свернуть = "\n")
States_sample <- dplyr::sample_n(состояния, 3)
States_sample_string <- вставить (применить (states_sample, 1, вставить, свернуть = "\t"), свернуть = "\n")
 

Шаг 2. Создайте приглашение для LLM

Формат должен быть примерно таким: «Действуйте так, как если бы вы были специалистом по данным. У вас есть таблица SQLite с именем {table_name} со следующей схемой:  ```{schema}``` . Первые строки выглядят так: ```{rows_sample}``` . На основе этих данных напишите SQL-запрос, чтобы ответить на следующий вопрос: {запрос} . Возвратите только SQL, не включайте пояснения."

Следующая функция создает запрос в формате этого типа, принимая аргументы для схемы данных, типовых строк, пользовательского запроса и имени таблицы.

create_prompt <- function(schema, rows_sample, query, table_name) {
  Glue::glue("Действуйте так, как будто вы специалист по данным.  У вас есть таблица SQLite с именем {table_name} со следующей схемой:
  
             ```
             {схема}
             ```
             
             Первые строки выглядят так:
             
             ```{rows_sample}```
             
             На основе этих данных напишите SQL-запрос, чтобы ответить на следующий вопрос: {запрос}. Возвращайте ТОЛЬКО SQL-запрос. Не включайте никаких дополнительных объяснений».)
}
 

Шаг 3. Отправка данных в API OpenAI

Вы можете начать с вырезания и вставки данных в один из веб-интерфейсов OpenAI, чтобы просмотреть результаты либо в ChatGPT, либо на игровой площадке OpenAI API. ChatGPT не взимает плату за использование, но вы не можете настроить результаты. Игровая площадка позволяет вам устанавливать такие вещи, как температура — то есть, насколько «случайным» или творческим должен быть ответ — и какую модель вы хотите использовать. Для кода SQL я установил температуру на 0.

Затем я сохраняю вопрос на естественном языке в переменной my_query , создайте приглашение с помощью моей функции create_prompt() и посмотрите, что произойдет, когда я вставлю это приглашение в игровую площадку API:

> my_query <- «Каковы были самые высокие и самые низкие изменения населения в 2020 году по подразделениям?»
> my_prompt <- get_query(states_schema_string, States_sample_string, my_query, "состояния")
> кошка (моя_подсказка)
Действуйте так, как будто вы специалист по данным.  У вас есть таблица SQLite с именем state со следующей схемой:
  
```
0 Состояние ТЕКСТ 0 Нет данных 0
1 Pop_2000 INTEGER 0 NA 0
2 Pop_2010 INTEGER 0 NA 0
3 Pop_2020 INTEGER 0 NA 0
4 PctChange_2000 REAL 0 NA 0
5 PctChange_2010 REAL 0 NA 0
6 PctChange_2020 ДЕЙСТВИТЕЛЬНОЕ 0 NA 0
7 Код состояния ТЕКСТ 0 NA 0
8 Регион ТЕКСТ 0 Нет данных 0
9Раздел ТЕКСТ 0 NA 0
```
Первые строки выглядят так:
```Делавэр 783600 897934 989948 17,6 14,6 10,2 DE Южная Южная Атлантика
Монтана 

5 989415 1084225 12,9 9,7 9,6 MT Уэст-Маунтин Аризона 5130632 6392017 7151502 40,0 24,6 11,9 AZ Уэст-Маунтин``` На основе этих данных напишите SQL-запрос, чтобы ответить на следующий вопрос: каковы были самые высокие и самые низкие изменения численности населения в 2020 году по подразделениям? Возвращайте ТОЛЬКО SQL-запрос. Не включайте никаких дополнительных объяснений.

Шэрон Махлис скриншот

Приглашение введено в игровую площадку OpenAI API и результирующий код SQL.

Вот результаты, когда я запускаю предложенный SQL:

sqldf("ВЫБЕРИТЕ подразделение, MAX(PctChange_2020) AS Highest_PctChange_2020, MIN(PctChange_2020) AS Lowest_PctChange_2020 FROM состояний GROUP BY Division;")
            Подразделение Highest_PctChange_2020 Lowest_PctChange_2020
1 Восток Север Центр 4,7 -0,1
2 Восток Юг Центр 8,9 -0,2
3 Средняя Атлантика 5,7 2,4
4 Горный 18,4 2,3
5 Новая Англия 7,4 0,96 Тихоокеанский 14,6 3,3
7 Южная Атлантика 14,6 -3,2
8 Запад Северо-Центральный 15,8 2,8
9 Запад Юг Централ 15,9 2,7
 

Мало того, что ChatGPT сгенерировал точный SQL, но Мне не нужно было сообщать GPT, что «изменение населения в 2020 году» находится в столбце Pop_2020.

Шаг 4. Выполнение результатов кода SQL, возвращенного GPT

Было бы намного удобнее отправлять и возвращать данные в OpenAI и обратно программно, вместо того, чтобы копировать и вставлять их в веб-интерфейс. Существует несколько пакетов R для работы с OpenAI API. Следующий блок кода отправляет приглашение в API с помощью пакета openai , сохраняет ответ API, извлекает часть ответа, содержащую текст с запрошенным кодом SQL, печатает этот код и выполняет SQL для данных.

библиотека (опенай)
my_results <- openai::create_chat_completion(model = "gpt-3.5-turbo", температура = 0, сообщения = список(
  список (роль = "пользователь", содержимое = моя_подсказка)
))
the_answer <- my_results$choices$message.content 

кошка(the_answer) SELECT Division, MAX(PctChange_2020) AS Highest_Population_Change, MIN(PctChange_2020) AS Lowest_Population_Change ИЗ государств СГРУППИРОВКА ПО Дивизиону;
sqldf(the_answer) Подразделение Highest_Population_Change Lowest_Population_Change 1 Восток Север Центр 4,7 -0,1 2 Восток Юг Центр 8,9 -0,2 3 Средняя Атлантика 5,7 2,4 4 Горный 18,4 2,3 5 Новая Англия 7,4 0,96 Тихоокеанский 14,6 3,3 7 Южная Атлантика 14,6 -3,2 8 Запад Северо-Центральный 15,8 2,8 9 Запад Юг Централ 15,9 2,7

Вам нужен ключ API OpenAI, если вы хотите использовать API. Для этого пакета ключ должен храниться в переменной системной среды, такой как OPENAI_API_KEY . Обратите внимание, что API нельзя использовать бесплатно, но я запускал этот проект более дюжины раз за день до того, как включил его в свой редактор, и общее использование моей учетной записи составило 1 цент.

Шаг 5 (необязательно): создание интерактивного приложения

Теперь у вас есть весь код, необходимый для выполнения запроса в рабочем процессе R в скрипте или терминале. Но если вы хотите создать интерактивное приложение для запроса данных на простом языке, я включил код базового приложения Shiny, которое вы можете использовать.

Связанный:

  • Генеративный ИИ
  • Искусственный интеллект
  • SQL
  • R Язык
  • Управление данными
  • Разработка программного обеспечения

Страница 1 из 2

Премия InfoWorld Technology of the Year 2023. Прием заявок открыт!

SQL и NoSQL: объяснение различий + когда использовать каждый

Для хранения цифровых данных используются две основные базы данных: SQL (реляционные базы данных) и NoSQL (нереляционные базы данных). Хотя оба метода эффективно хранят данные, они различаются по своей структуре, масштабируемости, взаимосвязям, языку и поддержке.

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

Что такое SQL?

Язык структурированных запросов (SQL) — это язык программирования, который позволяет как технически подкованным, так и нетехническим пользователям запрашивать, манипулировать и изменять данные в реляционной базе данных.

Базы данных SQL, организованные в виде столбцов и строк в таблице, используют реляционную модель, которая лучше всего работает с четко определенными структурированными данными, такими как имена и количества, в которых существуют отношения между различными объектами. В базе данных SQL таблицы связаны через «внешние ключи», которые формируют отношения между различными таблицами и полями, такими как клиенты и заказы или сотрудники и отделы.

Базы данных SQL масштабируются по вертикали, что означает, что вы можете увеличить максимальную нагрузку, добавив дополнительные компоненты хранилища, такие как RAM или SSD. Хотя в некоторых случаях это может означать, что базы данных SQL ограничены ресурсами, доступными на сервере, облачное хранилище и другие технологии могут обеспечить большую масштабируемость SQL.

Подробнее: Чем занимается разработчик SQL? Роль, зарплата и навыки

Что такое NoSQL?

Базы данных NoSQL — это нереляционные базы данных, которые хранят данные способом, отличным от табличных отношений, используемых в базах данных SQL.
В то время как базы данных SQL лучше всего использовать для структурированных данных, базы данных NoSQL подходят для структурированных, полуструктурированных и неструктурированных данных. В результате базы данных NoSQL не следуют жесткой схеме, а вместо этого имеют более гибкую структуру для размещения своих типов данных. Кроме того, вместо использования SQL для запросов к базе данных базы данных NoSQL используют различные языки запросов (некоторые даже не имеют языка запросов).

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

Нереляционные базы данных NoSQL хорошо работают с неструктурированными данными и обычно обладают следующими свойствами:

  • NoSQL использует нетабличные модели данных, которые могут быть документно-ориентированными, основанными на ключе-значении или графе. Наиболее распространенные базы данных NoSQL включают MongoDB, Cassandra, HBase, Redis, Neo4j и CouchDB.

NoSQL справляется с проблемами масштабирования и гибкости, с которыми вы можете столкнуться в современных приложениях, особенно в тех, которые обрабатывают большие объемы быстро меняющихся данных. Эти требования существуют во всех отраслевых вертикалях и областях применения, включая IoT, пользовательскую аналитику, персонализацию, рекламные технологии, электронную коммерцию, игры и социальные сети.
Подробнее: Реляционная и нереляционная базы данных: объяснение различий

Основные различия между NoSQL и SQL

На высоком уровне базы данных NoSQL и SQL имеют много общего.

Помимо поддержки хранения данных и запросов, они также позволяют извлекать, обновлять и удалять сохраненные данные. Однако под поверхностью скрываются некоторые существенные различия, влияющие на производительность, масштабируемость и гибкость NoSQL и SQL.

Вот некоторые из основных различий между базами данных SQL и NoSQL:

Структура

Базы данных SQL основаны на таблицах, в то время как базы данных NoSQL могут быть документно-ориентированными, парами ключ-значение или графовыми структурами. В базе данных NoSQL документ может содержать пары ключ-значение, которые затем можно упорядочивать и вкладывать друг в друга.

Масштабируемость

Базы данных SQL масштабируются вертикально, обычно на одном сервере, и требуют от пользователей увеличения физического оборудования для увеличения емкости хранилища. По сути, несмотря на то, что доступны варианты облачных хранилищ, базы данных SQL могут быть непомерно дорогими для бизнеса при работе с огромными объемами больших данных.

Базы данных NoSQL обеспечивают горизонтальное масштабирование, а это означает, что для увеличения нагрузки на них просто необходимо добавить больше серверов. Это означает, что базы данных NoSQL лучше подходят для современных облачных инфраструктур, которые предлагают распределенные ресурсы.

Язык

Базы данных SQL используют SQL (язык структурированных запросов). Базы данных NoSQL используют JSON (обозначение объектов JavaScript), XML, YAML или двоичную схему, упрощая неструктурированные данные. SQL имеет фиксированную схему, в то время как базы данных NoSQL более гибкие.

Поддержка

SQL — это популярный стандартный язык, который хорошо поддерживается многими различными системами баз данных, в то время как NoSQL имеет различные уровни поддержки в различных системах баз данных.

Что касается поддержки, вы, как правило, обнаружите, что для баз данных SQL доступно больше помощи, чем для NoSQL. Это связано с тем, что SQL является более устоявшейся технологией и, следовательно, имеет гораздо больше пользователей и разработчиков, которые могут помочь вам с вашими проблемами. Напротив, NoSQL все еще относительно нов, и на форумах или в сообществе доступно меньше помощи. Возможности вашей поддержки могут быть ограничены, если вы столкнетесь с трудностями при ее использовании.

Плюсы и минусы SQL

SQL — это язык общения данных. Это язык, который вы чаще всего будете использовать для запросов к базам данных и перемещения структурированных данных между традиционными приложениями. Это мощный язык, который может помочь вам во многих задачах, связанных с данными, но также имеет некоторые недостатки.

Вот некоторые плюсы и минусы использования SQL для хранения и извлечения данных.

Плюсы SQL:

Минусы SQL:

Плюсы и минусы NoSQL

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

Однако NoSQL менее совершенен, чем SQL. Вот взгляд на плюсы и минусы NoSQL.

Плюсы NoSQL:

  • Гибкая схема

  • Возможность использования на платформах распределенной инфраструктуры

  • Недорогая инфраструктура

  • Высокая доступность и пропускная способность

Минусы NoSQL:

  • Менее развитая технология и сложность в управлении

  • Ограниченные возможности запросов

  • Несогласованность данных и низкая производительность в некоторых сложных сценариях

Когда использовать: SQL или NoSQL

Важно решить, когда использовать NoSQL или SQL, поскольку они различаются по структуре, возможностям и идеальным вариантам использования.

Реляционная база данных, такая как SQL, — отличный вариант, если вы хотите создать приложение, структурированное на основе отношений между таблицами данных. SQL также хорошо работает, когда вы хотите обеспечить согласованность данных в разных таблицах. Однако реляционные базы данных не всегда являются лучшим выбором с точки зрения гибкости или масштабируемости.

Нереляционная база данных NoSQL не использует структурированные таблицы, а использует гибкие схемы для хранения неструктурированных данных. Это дает вам больше возможностей для масштабирования вашего проекта по мере необходимости. Однако это также означает, что у вас меньше контроля над согласованностью и отношениями данных.

 Подходит ли мне SQL?

Изучать что-то новое может быть интересно, а SQL может познакомить вас с миром управления данными. В рамках управляемого проекта «Введение в реляционную базу данных и SQL» вы получите практический опыт работы с реляционной базой данных всего за один час.

Вот несколько ситуаций, в которых NoSQL может оказаться наиболее подходящим для вас:

  • Вам нужна высокая производительность, особенно производительность чтения: То, как работают распределенные системы NoSQL, такие как Cassandra и Riak, означает, что вы обычно можете получить очень высокую производительность чтения путем добавления дополнительных ящиков. Некоторые доходят до того, что автоматически реплицируют данные между узлами, чтобы у вас всегда было достаточно копий данных для доступа.

Подробнее: Объяснение типов SQL JOIN

Дальнейшие действия

SQL и NoSQL — это два разных подхода к хранению данных и управлению ими. В то время как базы данных SQL были традиционным выбором для разработчиков приложений, базы данных NoSQL становятся все более популярными за последние несколько лет.
Если вы новичок в базах данных, вы можете подумать о том, чтобы получить четкое представление о базах данных SQL и NoSQL, пройдя недорогой онлайн-курс на Coursera.