Aplicación de transformaciones de SQL
Ejecuta una consulta de SQLite en conjuntos de datos de entrada para transformar los datos
Categoría: transformación y manipulación de datos
Nota
Se aplica a: machine learning Studio (clásico)
Este contenido solo pertenece a Studio (clásico). Se han agregado módulos similares de arrastrar y colocar al diseñador de Azure Machine Learning. Obtenga más información en este artículo comparativa de las dos versiones.
Información general sobre el módulo
En este artículo se describe cómo usar el módulo aplicar transformación de SQL en Azure machine learning Studio (clásico) para especificar una consulta SQL en un conjunto de datos de entrada o en conjuntos de datos.
SQL es útil cuando necesita modificar los datos de maneras complejas o conservar los datos para su uso en otros entornos. Por ejemplo, mediante el módulo aplicar transformación de SQL , puede:
Crear tablas para los resultados y guarde los conjuntos de datos en una base de datos portátil.
Realizar transformaciones personalizadas en tipos de datos o crear agregados.
Ejecutar instrucciones de consulta SQL para filtrar o modificar datos y devolver los resultados de la consulta como una tabla de datos.
Importante
El motor de SQL que se usa en este módulo es SQLite. Si no está familiarizado con la sintaxis de SQLite, asegúrese de leer la sección sintaxis y uso de este artículo para obtener ejemplos.
¿Qué es SQLite?
SQLite es un sistema de administración de bases de datos relacionales de dominio público que se encuentra en una biblioteca de programación de C. SQLite es una opción muy habitual de base de datos incrustada para el almacenamiento local en exploradores web.
SQLite se diseñó originalmente en 2000 para la Marina estadounidense, para realizar las transacciones sin servidor. Es un motor de base de datos independiente que no tiene ningún sistema de administración y, por tanto, no requiere ninguna configuración o administración.
Configuración del módulo de aplicación de transformaciones de SQL
El módulo puede tardar hasta tres conjuntos de datos como entradas. Al hacer referencia a los conjuntos de datos conectados a cada puerto de entrada, debe utilizar los nombres t1
, t2
y t3
. El número de la tabla indica el índice del puerto de entrada.
El parámetro restante es una consulta SQL, que utiliza la sintaxis de SQLite. Este módulo admite todas las instrucciones estándar de la sintaxis de SQLite. Para obtener una lista de instrucciones no admitidas, consulte la sección Notas técnicas.
Sintaxis y uso generales
Al escribir varias líneas en el cuadro de texto SQL Script (Script de SQL), utilice un punto y coma para terminar cada instrucción. De lo contrario, los saltos de línea se convierten en espacios.
Por ejemplo, las siguientes instrucciones son equivalentes:
SELECT * from t1;
SELECT * from t1;
Puede agregar comentarios usando
--
al principio de cada línea o encerrando el texto entre/* */
.Por ejemplo, esta instrucción es válida:
SELECT * from t1 /*WHERE ItemID BETWEEN 1 AND 100*/;
Si un nombre de columna duplica el nombre de una palabra clave reservada, el resaltado de sintaxis se aplica al texto dentro del cuadro de texto script de SQL . Para evitar confusiones, debe incluir los nombres de columna entre corchetes (para seguir la Convención de Transact-SQL) o los acentos o las comillas dobles (Convención de ANSI SQL).
Por ejemplo, en la siguiente consulta del conjunto de claves de la donación de sangre, Time es un nombre de columna válido, pero también es una palabra clave reservada.
SELECT Recency, Frequency, Monetary, Time, Class FROM t1 WHERE Time between 3 and 20;
Si ejecuta la consulta como está, es posible que la consulta devuelva los resultados correctos, pero, dependiendo del conjunto de resultados, podría devolver un error. Estos son algunos ejemplos de cómo evitar el problema:
-- 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;
Nota
El resaltado de sintaxis permanece en la palabra clave incluso después de encerrarse entre comillas o corchetes.
SQLite no distingue entre mayúsculas y minúsculas, salvo por algunos comandos que tienen variantes que distinguen mayúsculas de minúsculas y tienen diferentes significados (Glob frente a Glob).
Instrucción SELECT
En la SELECT
instrucción, los nombres de columna que incluyen espacios u otros caracteres prohibidos en identificadores deben ir entre comillas dobles, corchetes o caracteres de acento grave (').
Por ejemplo, esta consulta hace referencia al conjunto de Two-Class iris en t1
, pero un nombre de columna contiene un carácter prohibido, por lo que el nombre de la columna está entre comillas.
SELECT class, "sepal-length" FROM t1;
Puede Agregar una WHERE
cláusula para filtrar los valores del conjunto de DataSet.
SELECT class, "sepal-length" FROM t1 WHERE "sepal-length" >5.0;
La sintaxis de SQLite no admite la TOP
palabra clave, que se usa en Transact-SQL. En su lugar, puede usar la LIMIT
palabra clave o una FETCH
instrucción.
Por ejemplo, Compare estas consultas en el conjunto de conjuntos Bike.
-- 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;
Combinaciones
Los ejemplos siguientes usan el conjunto de datos de las clasificaciones de restaurantes en el puerto de entrada correspondiente a t1
, mientras que el conjunto de datos de las características de los restaurantes se usan en el puerto de entrada que corresponde a t2
.
La instrucción siguiente une las dos tablas para crear un conjunto de datos que combina las características del restaurante especificado con un promedio de clasificaciones para cada restaurante.
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;
Funciones de agregado
En esta sección se proporcionan ejemplos básicos de algunas funciones comunes de agregado de SQL, con SQLite.
Las funciones de agregado que se admiten actualmente son: AVG
, COUNT
, MAX
, MIN
, SUM
, TOTAL
.
La consulta siguiente devuelve un conjunto de datos que contiene el identificador del restaurante, junto con el promedio de clasificación para el restaurante.
SELECT DISTINCT placeid,
AVG(rating) AS ‘AvgRating’,
FROM t1
GROUP BY placeid
Trabajo con cadenas
SQLite es compatible con el operador de canalización doble para concatenar cadenas.
La siguiente instrucción crea una nueva columna mediante la concatenación de dos columnas de texto.
SELECT placeID, name,
(city || '-' || state) AS 'Target Region',
FROM t1
Advertencia
No se admite el operador de concatenación de cadenas de Transact-SQL: + (concatenación de cadenas). Por ejemplo, la expresión ('city + '-' + state) AS 'Target Region'
en la consulta de ejemplo devolvería 0 para todos los valores.
Sin embargo, aunque el operador no se admite para este tipo de datos, no se produce ningún error en Azure Machine Learning. Asegúrese de comprobar los resultados de Aplicar transformación de SQL antes de utilizar el conjunto de datos resultante en un experimento.
COALESCE y CASE
COALESCE
evalúa varios argumentos, en orden, y devuelve el valor de la primera expresión que no se evalúa como NULL.
Por ejemplo, si aplicamos esta consulta al conjunto de datos sobre las distintas clases de recocido de acero, se devuelve el primer indicador que no sea nulo de una lista de columnas que se supone que tienen valores mutuamente excluyentes. Si no se encuentra ninguna marca, se devuelve la cadena "none".
SELECT classes, family, [product-type],
COALESCE(bt,bc,bf,[bw/me],bl, "none") AS TemperType
FROM t1;
La CASE
instrucción es útil para probar valores y devolver un nuevo valor basándose en los resultados evaluados. SQLite admite la siguiente sintaxis para las CASE
instrucciones:
CASE WHEN [condición] THEN [expresión] ELSE [expresión] END
CASE [expresión] WHEN [valor] THEN [expresión] ELSE [expresión] END
Por ejemplo, supongamos que anteriormente usó el módulo convertir en valores de indicador para crear columnas de características de conjunto que contengan valores true-false. La siguiente consulta contrae los valores de varias columnas de características en una sola columna multivalor.
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;
Ejemplos
Para obtener un ejemplo de cómo se puede usar este módulo en experimentos de aprendizaje automático, vea este ejemplo en el Azure AI Gallery:
- Aplicar transformación de SQL: utiliza el conjunto de elementos de la clasificación de restaurante, las características de restaurante y los clientes de restaurante para ilustrar combinaciones simples, instrucciones SELECT y funciones de agregado.
Notas técnicas
Esta sección contiene detalles de implementación, sugerencias y respuestas a las preguntas más frecuentes.
Siempre se requiere una entrada en el puerto 1.
Si el conjunto de datos de entrada tiene nombres de columna, las columnas del conjunto de datos de salida utilizarán los nombres de columna del conjunto de datos de entrada.
Si el conjunto de datos de entrada no tiene nombres de columna, los nombres de columna de la tabla se crean automáticamente con la Convención de nomenclatura siguiente: T1COL1, T1COL2, T1COL3, etc., donde los números indican el índice de cada columna del conjunto de datos de entrada.
En el caso de los identificadores de columna que contienen un espacio u otros caracteres especiales, incluya siempre el identificador de columna entre corchetes o comillas dobles al hacer referencia a la columna en las cláusulas
SELECT
oWHERE
.
Instrucciones no admitidas
Aunque SQLite admite gran parte del estándar ANSI SQL, no incluye muchas características compatibles con los sistemas de bases de datos relacionales comerciales. Para más información, consulte SQL como lo entiende SQLite. Además, tenga en cuenta las siguientes restricciones al crear instrucciones SQL:
SQLite usa la escritura dinámica para los valores, en lugar de asignar un tipo a una columna como en la mayoría de los sistemas de bases de datos relacionales. Tiene un establecimiento flexible de tipos y permite la conversión implícita de tipos.
LEFT OUTER JOIN
está implementado, pero noRIGHT OUTER JOIN
niFULL OUTER JOIN
.Puede utilizar las instrucciones
RENAME TABLE
yADD COLUMN
con el comandoALTER TABLE
, pero no se admiten otras cláusulas, comoDROP COLUMN
,ALTER COLUMN
yADD CONSTRAINT
.Puede crear una vista dentro de SQLite, pero las vistas posteriores son de solo lectura. No se puede ejecutar una instrucción
DELETE
,INSERT
oUPDATE
en una vista. Sin embargo, puede crear un desencadenador que se active al intentarDELETE
,INSERT
oUPDATE
en una vista y realizar otras operaciones en el cuerpo del desencadenador.
Además de la lista de funciones no admitidas que se proporcionan en el sitio oficial de SQLite, la siguiente wiki proporciona una lista de otras características no admitidas: SQLite: SQL no admitido
Entradas esperadas
Nombre | Tipo | Descripción |
---|---|---|
Table1 | Tabla de datos | Conjunto de datos de entrada1 |
Table2 | Tabla de datos | Conjunto de datos de entrada2 |
Tabla3 | Tabla de datos | Conjunto de datos de entrada3 |
Parámetros del módulo
Nombre | Intervalo | Tipo | Valor predeterminado | Descripción |
---|---|---|---|---|
Script de consulta SQL | cualquiera | StreamReader | Instrucción de consulta SQL |
Salidas
Nombre | Tipo | Descripción |
---|---|---|
Conjunto de datos de resultados | Tabla de datos | Conjunto de datos de salida |
Excepciones
Excepción | Descripción |
---|---|
Error 0001 | Se produce una excepción si no se encuentran una o varias de las columnas especificadas del conjunto de datos. |
Error 0003 | Se produce una excepción si uno o más de los conjuntos de datos de entrada es nulo o está vacío. |
Error 0069 | Error de lógica de SQL o falta la base de datos |
Para obtener una lista de los errores específicos de los módulos de Studio (clásico), consulte Machine Learning de los códigos de error.
Para obtener una lista de excepciones de API, consulte códigos de error de la API de REST de machine learning.