Aplicar transformação de SQL
Executa uma consulta do SQLite em conjuntos de dados de entrada para transformar os dados
Categoria: transformação/manipulação de dados
Observação
Aplica-se a: Machine Learning Studio (clássico)
Esse conteúdo pertence apenas ao estúdio (clássico). Módulos de arrastar e soltar semelhantes foram adicionados ao designer de Azure Machine Learning. Saiba mais neste artigo comparando as duas versões.
Visão geral do módulo
Este artigo descreve como usar o módulo aplicar transformação de SQL no Azure Machine Learning Studio (clássico) para especificar uma consulta SQL em um conjunto de dados de entrada ou DataSets.
O SQL é útil quando você precisa modificar seus dados de maneiras complexas ou manter os dados para uso em outros ambientes. Por exemplo, usando o módulo aplicar transformação SQL , você pode:
Criar tabelas para resultados e salvar os conjuntos de dados em um banco de dados portátil.
Realizar transformações personalizadas em tipos de dados ou criar agregações.
Executar instruções de consulta SQL para filtrar ou alterar dados e retornar os resultados da consulta como uma tabela de dados.
Importante
O mecanismo SQL usado neste módulo é SQLite. Se você não estiver familiarizado com a sintaxe do SQLite, leia a seção sintaxe e uso deste artigo para obter exemplos.
O que é SQLite?
SQLite é um sistema de gerenciamento de banco de dados relacional de domínio público que está contido em uma biblioteca de programação C. SQLite é uma opção popular como um banco de dados inserido para o armazenamento local em navegadores da Web.
SQLite foi originalmente projetado em 2000 para a Marinha dos EUA, para oferecer suporte a transações sem servidor. É um mecanismo de banco de dados independente que não possui um sistema de gerenciamento e portanto não requer configuração ou administração.
Como configurar aplicar transformação SQL
O módulo pode ter até três conjuntos de dados como entradas. Ao fazer referência aos conjuntos de dados conectados a cada porta de entrada, você deve usar os nomes t1
, t2
e t3
. O número da tabela indica o índice da porta de entrada.
O parâmetro restante é uma consulta SQL, que usa a sintaxe do SQLite. Este módulo oferece suporte a todas as instruções padrão da sintaxe do SQLite. Para obter uma lista de instruções sem suporte, consulte a seção observações técnicas .
Sintaxe e uso geral
Ao digitar várias linhas na caixa de texto script SQL , use um ponto-e-vírgula para encerrar cada instrução. Caso contrário, as quebras de linha serão convertidas em espaços.
Por exemplo, as instruções seguintes são equivalentes:
SELECT * from t1;
SELECT * from t1;
Você pode adicionar comentários usando
--
no início de cada linha ou colocando o texto entre/* */
.Por exemplo, esta instrução é válida:
SELECT * from t1 /*WHERE ItemID BETWEEN 1 AND 100*/;
Se um nome de coluna duplicar o nome de uma palavra-chave reservada, o realce de sintaxe será aplicado ao texto dentro da caixa de texto script SQL . Para evitar confusão, você deve colocar os nomes de coluna com colchetes (para seguir a Convenção Transact-SQL) ou backtiques ou aspas duplas (a Convenção SQL ANSI).
Por exemplo, na consulta a seguir no conjunto de colunas de doação de sangue, time é um nome de coluna válido, mas também é uma palavra-chave reservada.
SELECT Recency, Frequency, Monetary, Time, Class FROM t1 WHERE Time between 3 and 20;
Se você executar a consulta como está, a consulta poderá retornar os resultados corretos, mas, dependendo do conjunto de um, poderá retornar um erro. Aqui estão alguns exemplos de como evitar o 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;
Observação
O realce de sintaxe permanece na palavra-chave mesmo depois de ser colocado entre aspas ou colchetes.
O SQLite não diferencia maiúsculas de minúsculas, exceto para alguns comandos que têm variantes com diferenciação de maiúsculas e minúsculas com significados diferentes (glob versus glob).
Instrução SELECT
Na SELECT
instrução, os nomes de coluna que incluem espaços ou outros caracteres proibidos em identificadores devem ser colocados entre aspas duplas, colchetes ou caracteres de acento grave (').
Por exemplo, essa consulta faz referência a Two-Class conjunto de t1
espaço íris em, mas um nome de coluna contém um caractere proibido, portanto, o nome da coluna é colocado entre aspas.
SELECT class, "sepal-length" FROM t1;
Você pode adicionar uma WHERE
cláusula para filtrar valores no conjunto de conjuntos.
SELECT class, "sepal-length" FROM t1 WHERE "sepal-length" >5.0;
A sintaxe do SQLite não oferece suporte à TOP
palavra-chave, que é usada no Transact-SQL. Em vez disso, você pode usar a LIMIT
palavra-chave ou uma FETCH
instrução.
Por exemplo, Compare essas consultas no conjunto de consulta de aluguel de bicicletas.
-- 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;
Junções
Os exemplos a seguir usam o conjunto de dados Classificações do restaurante na porta de entrada correspondente a t1
e o conjunto de dados Recursos do restaurante na porta de entrada correspondente a t2
.
A instrução a seguir associa as duas tabelas para criar um conjunto de dados que combina os recursos especificados do restaurante às classificações médias de 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;
Funções de agregação
Esta seção fornece exemplos básicos de algumas funções de agregação SQL comuns, usando o SQLite.
Atualmente, as funções de agregação com suporte são:,,,, AVG
COUNT
MAX
MIN
SUM
, TOTAL
.
A consulta a seguir retorna um conjunto de dados que contém a ID do restaurante, junto com a classificação média do restaurante.
SELECT DISTINCT placeid,
AVG(rating) AS ‘AvgRating’,
FROM t1
GROUP BY placeid
Trabalhando com cadeias de caracteres
SQLite suporta o operador de barra vertical dupla para concatenar cadeias de caracteres.
A instrução a seguir cria uma nova coluna, concatenando as duas colunas de texto.
SELECT placeID, name,
(city || '-' || state) AS 'Target Region',
FROM t1
Aviso
Não há suporte para o operador de concatenação de cadeia de caracteres Transact-SQL: + (concatenação de cadeia de caracteres). Por exemplo, a expressão ('city + '-' + state) AS 'Target Region'
na consulta de exemplo retornaria 0 para todos os valores.
No entanto, mesmo que o operador não seja suportado para esse tipo de dados, nenhum erro será gerado no Aprendizado de Máquina do Azure. Certifique-se de verificar os resultados de Aplicar transformação de SQL antes de usar o conjunto de dados resultante em um experimento.
COALESCE e CASE
COALESCE
avalia vários argumentos, em ordem, e retorna o valor da primeira expressão que não é avaliada como NULL.
Por exemplo, essa consulta no conjunto de dados Multiclasse do recozimento de aço retorna o primeiro sinalizador não nulo de uma lista de colunas para ter valores mutuamente exclusivos. Se nenhum sinalizador for encontrado, a cadeia de caracteres "nenhum" será retornado.
SELECT classes, family, [product-type],
COALESCE(bt,bc,bf,[bw/me],bl, "none") AS TemperType
FROM t1;
A CASE
instrução é útil para testar valores e retornar um novo valor com base nos resultados avaliados. O SQLite dá suporte à seguinte sintaxe para CASE
instruções:
CASE WHEN [condition] THEN [expression] ELSE [expression] END
CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END
Por exemplo, suponha que você tenha usado anteriormente o módulo converter para valores de indicador para criar um conjunto de colunas de recursos que contenham valores true-false. A consulta a seguir recolhe os valores em várias colunas de recurso em uma única coluna com vários valores.
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;
Exemplos
Para obter um exemplo de como esse módulo pode ser usado em experimentos de aprendizado de máquina, consulte este exemplo no Galeria de ia do Azure:
- Aplicar transformação SQL: usa as classificações do restaurante, os recursos do restaurante e o conjunto de os clientes do restaurante para ilustrar junções simples, instruções SELECT e funções de agregação.
Notas técnicas
Esta seção contém detalhes de implementação, dicas e respostas para perguntas frequentes.
Uma entrada é sempre necessária na porta 1.
Se o conjunto de dados de entrada tiver nomes de coluna, as colunas do conjunto de dados de saída usarão os nomes das colunas do conjunto de dados de entrada.
Se o conjunto de dados de entrada não tiver nomes de coluna, os nomes de coluna na tabela serão criados automaticamente usando a seguinte convenção de nomenclatura: T1COL1, T1COL2, T1COL3 e assim por diante, em que os números indicam o índice de cada coluna no conjunto de dados de entrada.
Para identificadores de coluna que contêm um espaço ou outros caracteres especiais, sempre coloque o identificador de coluna entre colchetes ou aspas duplas ao se referir à coluna nas
SELECT
WHERE
cláusulas ou.
Instruções sem suporte
Embora SQLite suporte a maior parte do padrão ANSI SQL, ele não inclui muitos recursos com suporte nos sistemas de banco de dados relacional comercial. Para obter mais informações, consulte SQL como compreendido pelo SQLite. Além disso, esteja ciente das seguintes restrições ao criar instruções SQL:
O SQLite usa digitação dinâmica para valores, em vez de atribuir um tipo a uma coluna como na maioria dos sistemas de banco de dados relacional. Ele é digitado sem rigidez e permite a conversão implícita de tipos.
LEFT OUTER JOIN
é implementado, mas nãoRIGHT OUTER JOIN
ouFULL OUTER JOIN
.Você pode usar as instruções
RENAME TABLE
eADD COLUMN
com o comandoALTER TABLE
, mas outras cláusulas não são suportadas, incluindoDROP COLUMN
,ALTER COLUMN
eADD CONSTRAINT
.Você pode criar uma VIEW dentro do SQLite, mas depois disso as exibições serão somente leitura. Você não pode executar uma instrução
DELETE
,INSERT
ouUPDATE
em uma exibição. No entanto, você pode criar um disparador que é acionado em uma tentativa deDELETE
,INSERT
ouUPDATE
em uma exibição e executar outras operações no corpo do gatilho.
Além da lista de funções não suportadas fornecida no site do SQLite oficial, o seguinte wiki fornece uma lista de outros recursos sem suporte: SQLite-SQL sem suporte
Entradas esperadas
Nome | Tipo | Descrição |
---|---|---|
Table1 | Tabela de Dados | Conjunto de dados de entrada1 |
Table2 | Tabela de Dados | Conjunto de dados de entrada2 |
Tabela3 | Tabela de Dados | Conjunto de dados de entrada3 |
Parâmetros do módulo
Nome | Intervalo | Type | Padrão | Descrição |
---|---|---|---|---|
Script de consulta do SQL | any | StreamReader | Instrução de consulta SQL |
Saídas
Nome | Tipo | Descrição |
---|---|---|
Conjunto de dados de resultados | Tabela de Dados | Conjunto de dados de saída |
Exceções
Exceção | Descrição |
---|---|
Erro 0001 | Ocorre uma exceção se uma ou mais colunas especificadas do conjunto de dados não podem ser encontradas. |
Erro 0003 | Ocorre uma exceção se um ou mais dos conjuntos de dados de entrada é nulo ou vazio. |
Erro 0069 | Erro lógico do SQL ou banco de dados ausente |
Para obter uma lista de erros específicos para módulos do Studio (clássicos), consulte Machine Learning códigos de erro.
Para obter uma lista de exceções de API, consulte Machine Learning códigos de erro da API REST.