Применение преобразования SQL
Важно!
Поддержка Студии машинного обучения (классической) будет прекращена 31 августа 2024 г. До этой даты рекомендуется перейти на Машинное обучение Azure.
Начиная с 1 декабря 2021 года вы не сможете создавать новые ресурсы Студии машинного обучения (классической). Существующие ресурсы Студии машинного обучения (классическая версия) можно будет использовать до 31 августа 2024 г.
- См. сведения о перемещении проектов машинного обучения из ML Studio (классической) в Машинное обучение Azure.
- См. дополнительные сведения о Машинном обучении Azure.
Поддержка документации по ML Studio (классической) прекращается, а сама документация может не обновляться в будущем.
Выполняет запрос SQLite на получение входных наборов данных для преобразования данных.
Категория: Преобразование или управление данными
Примечание
применимо к: только Машинное обучение Studio (классическая модель)
Подобные модули перетаскивания доступны в конструкторе машинного обучения Azure.
Обзор модуля
в этой статье описывается, как использовать модуль преобразования «применение SQL » в Машинное обучение Studio (классическая модель) для указания SQL запроса к входному набору данных или datasets.
SQL удобно использовать, если необходимо изменить данные сложными способами или сохранить данные для использования в других средах. например, с помощью модуля преобразования «применение SQL » можно:
создать таблицу для результатов, а затем сохранить наборы данных в переносимой базе данных;
выполнять пользовательские преобразования типов данных или создавать статистические выражения;
выполнять инструкции SQL-запроса для фильтрации или изменения данных и получения результатов запроса в виде таблицы данных.
Важно!
В этом модуле используется подсистема SQL SQLite. Если вы не знакомы с синтаксисом SQLite, ознакомьтесь с примерами в разделе синтаксис и использование этой статьи.
Что такое SQLite?
SQLite — это система управления реляционными базами данных в общедоступном домене, которая содержится в библиотеке программирования на языке C. SQLite — это популярная встраиваемая база данных для локального хранения в браузерах.
SQLite изначально был разработан в 2000 г. для ВМФ США для поддержки бессерверных транзакций. Это автономный модуль для работы с базами данных без системы управления, не требующий настройки или администрирования.
Как настроить модуль "Применение преобразования SQL"
В модуле может содержаться до трех наборов в качестве входных данных. При ссылке на наборы данных, подключенные к каждому входному порту, используйте имена t1
, t2
и t3
. Номер таблицы соответствует индексу входного порта.
Оставшийся параметр — SQL-запрос, в котором используется синтаксис SQLite. Этот модуль поддерживает все стандартные операторы синтаксиса SQLite. Список неподдерживаемых инструкций см. в разделе Технические примечания.
Общий синтаксис и использование
При вводе нескольких строк в текстовом поле скрипта SQL используйте точку с запятой для завершения каждой инструкции. В противном случае разрывы строки преобразуются в пробелы.
Например, следующие инструкции эквивалентны.
SELECT * from t1;
SELECT * from t1;
Комментарии можно добавлять с помощью либо
--
в начале каждой строки, либо путем заключения текста с помощью/* */
.Например, допустима следующая инструкция:
SELECT * from t1 /*WHERE ItemID BETWEEN 1 AND 100*/;
если имя столбца дублирует имя зарезервированного ключевого слова, к тексту в текстовом поле скрипта SQL применяется выделение синтаксиса. чтобы избежать путаницы, имена столбцов следует заключать в квадратные скобки (для соблюдения соглашения Transact-SQL), а также обратные или двойные кавычки (соглашение SQL ANSI).
Например, в следующем запросе набора данных о пожертвовании крови указано допустимое имя столбца, но оно также является зарезервированным ключевым словом.
SELECT Recency, Frequency, Monetary, Time, Class FROM t1 WHERE Time between 3 and 20;
Если выполнить запрос как есть, запрос может вернуть правильные результаты, но в зависимости от набора данных он может вернуть ошибку. Ниже приведены некоторые примеры того, как избежать проблемы.
-- Transact-SQL SELECT [Recency], [Frequency], [Monetary], [Time], [Class] FROM t1 WHERE [Time] between 3 and 20; -- ANSI SQL SELECT "Recency", "Frequency", "Monetary", "Time", "Class" FROM t1 WHERE `Time` between 3 and 20;
Примечание
Выделение синтаксиса остается на ключевом слове даже после того, как оно заключено в кавычки или квадратные скобки.
SQLite не учитывает регистр, за исключением нескольких команд с различными значениями, учитывающими регистр (стандартная маска и стандартная маска).
Инструкция SELECT
SELECT
В инструкции имена столбцов, которые содержат пробелы или другие символы, запрещенные в идентификаторах, должны быть заключены в двойные кавычки, квадратные скобки или символы обратного апострофа (').
Например, этот запрос ссылается на Two-Class набор данных IRI в t1
, но одно имя столбца содержит запрещенный символ, поэтому имя столбца заключено в кавычки.
SELECT class, "sepal-length" FROM t1;
Можно добавить WHERE
предложение для фильтрации значений в наборе данных.
SELECT class, "sepal-length" FROM t1 WHERE "sepal-length" >5.0;
Синтаксис SQLite не поддерживает TOP
ключевое слово, которое используется в Transact-SQL. Вместо этого можно использовать LIMIT
ключевое слово или FETCH
оператор.
Например, Сравните эти запросы с набором данных об аренде велосипедов.
-- unsupported in SQLite
SELECT TOP 100 [dteday] FROM t1 ;
ORDER BY [dteday] DESC;
-- Returns top 100
SELECT [dteday] FROM t1 LIMIT 100 ;
ORDER BY [dteday] DESC;
-- Returns top 100. Note that FETCH is on a new line.
SELECT [dteday] FROM t1 - ;
FETCH FIRST 100 rows ONLY;
ORDER BY [dteday] DESC;
Соединения
В следующих примерах используется набор данных оценок ресторанов на входном порте, соответствующем t1
, и набор данных характеристик ресторана на входном порте, соответствующем t2
.
Следующая инструкция соединяет две таблицы для создания набора данных, в котором указанные характеристики ресторана объединены со средними оценками каждого ресторана.
SELECT DISTINCT(t2.placeid),
t2.name, t2.city, t2.state, t2.price, t2.alcohol,
AVG(rating) AS 'AvgRating'
FROM t1
JOIN t2
ON t1.placeID = t2.placeID
GROUP BY t2.placeid;
Агрегатные функции
в этом разделе приводятся основные примеры некоторых общих SQL агрегатных функций с помощью SQLite.
В настоящее время поддерживаются следующие агрегатные функции: AVG
, COUNT
, MAX
, MIN
, SUM
, TOTAL
.
Следующий запрос возвращает набор данных, содержащий идентификатор ресторана и его среднюю оценку.
SELECT DISTINCT placeid,
AVG(rating) AS ‘AvgRating’,
FROM t1
GROUP BY placeid
Работа со строками
SQLite поддерживает оператор двойной вертикальной черты для объединения строк.
Следующая инструкция создает новый столбец путем объединения двух текстовых столбцов.
SELECT placeID, name,
(city || '-' || state) AS 'Target Region',
FROM t1
Предупреждение
оператор объединения строк Transact-SQL не поддерживается: + (объединение строк). Например, выражение ('city + '-' + state) AS 'Target Region'
в примере запроса возвращает 0 для всех значений.
однако, несмотря на то, что оператор не поддерживается для этого типа данных, в Машинное обучение не возникает ошибок. Не забудьте проверить результаты модуля Применение преобразования SQL перед использованием результирующего набора данных в эксперименте.
COALESCE и CASE
COALESCE
вычисляет несколько аргументов по порядку и возвращает значение первого выражения, которое не вычисляется как NULL.
Например, этот запрос к набору данных Steel Annealing Multi-Class возвращает первый ненулевой флаг из списка столбцов, которые имеют взаимоисключающие значения. Если флаг не найден, возвращается строка "none".
SELECT classes, family, [product-type],
COALESCE(bt,bc,bf,[bw/me],bl, "none") AS TemperType
FROM t1;
CASE
Оператор полезен для проверки значений и возврата нового значения на основе вычисленных результатов. SQLite поддерживает следующий синтаксис для CASE
операторов:
CASE WHEN [условие] THEN [выражение] ELSE [выражение] END
CASE [выражение] WHEN [значение] THEN [выражение] ELSE [выражение] END
Например, предположим, что ранее использовался модуль преобразовать в значения индикатора , чтобы создать набор столбцов, содержащих значения true-false. Следующий запрос сворачивает значения в нескольких столбцах функций в один многозначный столбец.
SELECT userID, [smoker-0], [smoker-1],
CASE
WHEN [smoker-0]= '1' THEN 'smoker'
WHEN [smoker-1]= '1' THEN 'nonsmoker'
ELSE 'unknown'
END AS newLabel
FROM t1;
Примеры
Пример использования этого модуля в экспериментах машинного обучения см. в этом примере в Коллекция решений ии Azure:
- применение преобразования "SQL": использует оценки ресторана, функции ресторана и набор данных клиентов ресторана, чтобы проиллюстрировать простые объединения, инструкции select и агрегатные функции.
Технические примечания
В этом разделе содержатся сведения и советы относительно реализации, а также ответы на часто задаваемые вопросы.
На порт 1 всегда должны подаваться входные данные.
Если входной набор данных содержит имена столбцов, столбцы в результирующем наборе данных будут использовать имена столбцов из входного набора данных.
Если у входного набора данных нет имен столбцов, имена столбцов в таблице автоматически создаются с использованием следующего соглашения об именовании: T1COL1, T1COL2, T1COL3 и т. д., где числа указывают индекс каждого столбца во входном наборе данных.
Для ссылки на идентификаторы столбцов, содержащих пробел или другие специальные символы, используйте квадратные скобки или двойные кавычки в предложениях
SELECT
иWHERE
.
Неподдерживаемые инструкции
Хотя SQLite поддерживает большую часть стандарта ANSI SQL, в него не включены несколько функций, поддерживаемых коммерческими системами реляционных баз данных. Дополнительную информацию см. в статье Поддержка SQL в SQLite. При создании инструкций SQL также необходимо учитывать указанные ниже ограничения.
SQLite использует динамическую типизацию значений, а не присвоение типа столбцу, как в большинстве систем реляционных баз данных. Кроме того, для нее характерна слабая типизация. Система также позволяет выполнять неявное преобразование типов.
Соединение
LEFT OUTER JOIN
реализовано,RIGHT OUTER JOIN
иFULL OUTER JOIN
— нет.Можно использовать инструкции
RENAME TABLE
иADD COLUMN
с командойALTER TABLE
, но другие предложения не поддерживаются, в том числеDROP COLUMN
,ALTER COLUMN
иADD CONSTRAINT
.Вы можете создать VIEW в SQLite, но последующие представления будут доступны только для чтения. Невозможно выполнить инструкцию
DELETE
,INSERT
илиUPDATE
для представления. Но вы можете создать триггер, срабатывающий при попытке выполнить инструкциюDELETE
,INSERT
илиUPDATE
для представления, и выполнить другие операции в теле триггера.
Помимо списка неподдерживаемых функций, предоставленного на официальном сайте SQLite, в следующей вики-статье приведен список других неподдерживаемых функций: SQLite: неподдерживаемые функции SQL
Ожидаемые входные данные
Имя | Тип | Описание |
---|---|---|
Table1 | Таблица данных | Input dataset1 |
Table2 | Таблица данных | Input dataset2 |
Table3 | Таблица данных | Input dataset3 |
Параметры модуля
Имя | Диапазон | Тип | По умолчанию | Описание |
---|---|---|---|---|
Сценарий SQL-запроса | any | StreamReader | Инструкция SQL-запроса |
Выходные данные
Имя | Тип | Описание |
---|---|---|
Набор данных результатов | Таблица данных | Выходной набор данных |
Исключения
Исключение | Описание |
---|---|
Ошибка 0001 | Исключение возникает, если не удалось найти один или несколько столбцов указанного набора данных. |
Ошибка 0003 | Исключение возникает, если один или несколько входных наборов данных имеют значение NULL или пусты. |
Ошибка 0069 | SQL логическая ошибка или отсутствует база данных |
список ошибок, относящихся к модулям студии (классическая версия), см. в разделе Машинное обучение коды ошибок.
список исключений API см. в разделе Машинное обучение REST API коды ошибок.
См. также раздел
Оперирование
Преобразование данных
Список модулей в алфавитном порядке