Použití transformace SQL

Důležité

Podpora studia Machine Learning (Classic) skončí 31. srpna 2024. Doporučujeme do tohoto data přejít na službu Azure Machine Learning.

Od 1. prosince 2021 nebude možné vytvářet nové prostředky studia Machine Learning (Classic). Do 31. srpna 2024 můžete pokračovat v používání stávajících prostředků studia Machine Learning (Classic).

Dokumentace ke studiu ML (Classic) se vyřazuje z provozu a v budoucnu se nemusí aktualizovat.

Spustí dotaz SQLite na vstupní datové sady pro transformaci dat.

Kategorie: Transformace a manipulace s daty

Poznámka

Platí pro: Machine Learning Studio (classic)

Podobné moduly s přetahováním jsou k dispozici v Azure Machine Learning návrháři.

Přehled modulu

Tento článek popisuje, jak pomocí modulu Apply SQL Transformation v Machine Learning Studiu (klasickém) zadat dotaz SQL na vstupní datovou sadu nebo datové sady.

SQL je vhod, když potřebujete data upravovat složitými způsoby nebo je zachovat pro použití v jiných prostředích. Například pomocí modulu Apply SQL Transformation můžete:

  • Vytvořte tabulky pro výsledky a uložte datové sady do přenosné databáze.

  • Proveďte vlastní transformace u datových typů nebo vytvořte agregace.

  • Spuštěním SQL příkazů dotazu můžete filtrovat nebo měnit data a vracet výsledky dotazu jako tabulku dat.

Důležité

Modul SQL použitý v tomto modulu je SQLite. Pokud syntaxi SQLite neznáme, nezapomeňte si příklady přečíst v části syntaxe a použití tohoto článku.

Co je SQLite?

SQLite je systém pro správu relačních databází s veřejnou doménou, který je součástí programovací knihovny jazyka C. SQLite je oblíbenou volbou jako vložená databáze pro místní úložiště ve webových prohlížečích.

SQLite byl původně navržen v roce 2000 pro americké navy s cílem podporovat bez serverů transakce. Jedná se o samostatný databázový stroj, který nemá žádný systém pro správu, a proto nevyžaduje žádnou konfiguraci ani správu.

Konfigurace transformace SQL dat

Tento modul může jako vstup zachytát až tři datové sady. Když odkazujete na datové sady připojené ke každému vstupnímu portu, musíte použít názvy t1, t2a t3. Číslo tabulky označuje index vstupního portu.

Zbývající parametr je vstupní SQL, který používá syntaxi SQLite. Tento modul podporuje všechny standardní příkazy syntaxe SQLite. Seznam nepodporovaných tvrzení najdete v části Technické poznámky.

Obecná syntaxe a použití

  • Při zadávání více řádků do textového SQL Script (Skript) ukončete jednotlivé výrazy středníkem. Jinak se konce řádků převedou na mezery.

    Například následující příkazy jsou ekvivalentní:

    SELECT   
    *   
    from   
    t1;  
    
    SELECT * from t1;  
    
  • Komentáře můžete přidat buď na -- začátek každého řádku, nebo uzavřením textu pomocí /* */.

    Například tento příkaz je platný:

    SELECT * from t1  
    /*WHERE ItemID BETWEEN 1 AND 100*/;  
    
  • Pokud název sloupce duplikuje název vyhrazeného klíčového slova, použije se u textu uvnitř textového pole SQL Script. Aby nedocházelo k nejasnostem, měli byste názvy sloupců uzavřít do hranatých závorek (aby bylo možné postupovat podle konvence Transact-SQL) nebo backtick nebo dvojitých uvozovek (ansi SQL konvence).

    Například v následujícím dotazu na datovou sadu pro odběr dat je Time platným názvem sloupce, ale je také vyhrazeným klíčovým slovem.

    SELECT Recency, Frequency, Monetary, Time, Class  
    FROM t1  
    WHERE Time between 3 and 20;  
    

    Pokud dotaz spustíte tak, jak je, může dotaz vrátit správné výsledky, ale v závislosti na datové sadě může vrátit chybu. Tady je několik příkladů, jak se tomuto problému vyhnout:

    -- 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;  
    

    Poznámka

    Zvýraznění syntaxe zůstává u klíčového slova i po jeho uzavření do uvozovek nebo závorek.

  • SQLite rozlišuje malá a velká písmena s výjimkou několika příkazů, které mají rozlišující malá a velká písmena s různými významy (GLOB vs. glob).

Příkaz SELECT

V příkazu SELECT musí být názvy sloupců, které obsahují mezery nebo jiné znaky zakázané v identifikátorech, uzavřeny do dvojitých uvozovek, hranatých závorek nebo zpětně odložených znaků (').

Tento dotaz například odkazuje na datovou sadu Two-Class Iris t1na , ale jeden název sloupce obsahuje zakázaný znak, takže název sloupce je uzavřený v uvozovkách.

SELECT class, "sepal-length" FROM t1;  

Můžete přidat klauzuli pro WHERE filtrování hodnot v datové sadě.

SELECT class, "sepal-length" FROM t1 WHERE "sepal-length" >5.0;  

Syntaxe SQLite nepodporuje klíčové slovo TOP , které se používá v transact-SQL. Místo toho můžete použít klíčové LIMIT slovo nebo FETCH příkaz .

Porovnejte například tyto dotazy na datové sadě Bike Rental (Půjčování kol).

-- 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;  

Spojení

Následující příklady používají datovou sadu Hodnocení restaurace na vstupním portut1, který odpovídá , a datovou sadu Restaurant Features (Funkce restaurace) na vstupním portu odpovídající .t2

Následující příkaz spojí tyto dvě tabulky a vytvoří datovou sadu, která kombinuje zadané atributy restaurace s průměrnými hodnoceními pro každou restaurace.

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;  

Agregační funkce

Tato část obsahuje základní příklady některých běžných SQL agregačních funkcí pomocí SQLite.

Aktuálně podporované agregační funkce: AVG, COUNT, MAX, MIN, , SUM, TOTAL.

Následující dotaz vrátí datovou sadu obsahující ID restaurace spolu s průměrným hodnocením restaurace.

SELECT DISTINCT placeid,  
AVG(rating) AS ‘AvgRating’,  
FROM t1  
GROUP BY placeid  

Práce s řetězci

SQLite podporuje operátor dvojité kanálu pro zřetězování řetězců.

Následující příkaz vytvoří nový sloupec zřetězováním dvou textových sloupců.

SELECT placeID, name,   
(city || '-' || state) AS 'Target Region',   
FROM t1  

Upozornění

Operátor zřetězení SQL jazyka Transact-SQL se nepodporuje: + (zřetězení řetězců). Například výraz v příkladu ('city + '-' + state) AS 'Target Region'dotazu vrátí 0 pro všechny hodnoty.

I když se pro tento datový typ nepodporuje operátor , v tomto datovém typu se Machine Learning. Před použitím výsledné datové sady v experimentu nezapomeňte ověřit výsledky SQL použít transformaci.

COALESCE a CASE

COALESCE vyhodnocuje více argumentů v pořadí a vrací hodnotu prvního výrazu, který není vyhodnocen na hodnotu NULL.

Například tento dotaz na datovou sadu Steel Annealing Multi-Class vrátí první příznak nenulové hodnoty ze seznamu sloupců, u které se předpokládá, že mají vzájemně se vylučující hodnoty. Pokud se žádný příznak nenašel, vrátí se řetězec "none".

SELECT classes, family, [product-type],  
COALESCE(bt,bc,bf,[bw/me],bl, "none") AS TemperType  
FROM t1;  

Příkaz CASE je užitečný pro testování hodnot a vrácení nové hodnoty na základě vyhodnocených výsledků. SQLite podporuje pro příkazy následující CASE syntaxi:

  • CASE WHEN [condition] THEN [expression] ELSE [expression] END

  • CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END

Předpokládejme například, že jste dříve použili modul Převést na hodnoty indikátorů k vytvoření sady sloupců funkcí obsahujících hodnoty true-false. Následující dotaz sbalí hodnoty ve více sloupcích funkcí do jednoho sloupce s více hodnotami.

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;  

Příklady

Příklad použití tohoto modulu v experimentech strojového učení najdete v této ukázce v Azure AI Gallery:

  • Použít SQL transformace: Používá datovou sadu Hodnocení restaurace, Funkce restaurace a Zákazníci restaurace k ilustraci jednoduchých spojení, výběrových příkazů a agregačních funkcí.

Technické poznámky

Tato část obsahuje podrobnosti o implementaci, tipy a odpovědi na nejčastější dotazy.

  • Vstup se vždy vyžaduje na portu 1.

  • Pokud vstupní datová sada obsahuje názvy sloupců, budou sloupce ve výstupní datové sadě používat názvy sloupců ze vstupní datové sady.

    Pokud vstupní datová sada neobsahuje názvy sloupců, vytvoří se názvy sloupců v tabulce automaticky pomocí následujících konvencí pro vytváření názvů: T1COL1, T1COL2, T1COL3 atd., kde čísla označují index každého sloupce ve vstupní datové sadě.

  • Pro identifikátory sloupců, které obsahují mezeru nebo jiné speciální znaky, SELECT při odkazování na sloupec v klauzulích or WHERE vždy uzavřete identifikátor sloupce do hranatých závorek nebo dvojitých uvozovek.

Nepodporované příkazy

I když SQLite podporuje velkou část standardu ANSI SQL, neobsahuje mnoho funkcí podporovaných komerčními relačními databázovými systémy. Další informace najdete v článku SQL rozumí SQLite. Při vytváření příkazů příkazů pro SQL si také uvědomte následující omezení:

  • SQLite používá pro hodnoty dynamické psaní místo přiřazení typu ke sloupci jako ve většině relačních databázových systémů. Je slabě typovaný a umožňuje implicitní převod typu.

  • LEFT OUTER JOIN se implementuje, ale ne RIGHT OUTER JOIN nebo FULL OUTER JOIN.

  • Příkazy a se dají použít RENAME TABLE spolu s ALTER TABLE příkazem, ale jiné klauzule nejsou podporované, včetně DROP COLUMN , ALTER COLUMN a ADD CONSTRAINT . ADD COLUMN

  • Můžete vytvořit zobrazení v rámci SQLite, ale zobrazení jsou až jen pro čtení. Nelze provést DELETE příkaz, INSERT nebo UPDATE v zobrazení. Můžete ale vytvořit Trigger, který se aktivuje při pokusu DELETE o spuštění, INSERT nebo UPDATE v zobrazení a provádění dalších operací v těle triggeru.

Kromě seznamu nepodporovaných funkcí poskytovaných na oficiálním webu SQLite je na následujícím wikiwebu uveden seznam dalších nepodporovaných funkcí: SQLite – nepodporované SQL

Očekávané vstupy

Název Typ Description
Table1 Tabulka dat Vstupní DataSet1.
Tabulka2 Tabulka dat Vstupní Dataset2
Table3 Tabulka dat Vstupní dataset3

Parametry modulu

Name Rozsah Typ Výchozí Description
SQL skript dotazu Libovolný StreamReader SQL příkaz dotazu

Výstupy

Název Typ Description
Datová sada výsledků Tabulka dat Výstupní datová sada

Výjimky

Výjimka Description
Chyba 0001 K výjimce dojde v případě, že se nepovedlo najít jeden nebo více zadaných sloupců datové sady.
Chyba 0003 K výjimce dojde v případě, že jedna nebo více vstupních datových sad je null nebo prázdné.
Chyba 0069 chyba logického SQL nebo chybějící databáze

seznam chyb, které jsou specifické pro moduly studia (classic), najdete v článku kódy chyb Machine Learning.

seznam výjimek rozhraní API najdete v tématu Machine Learning REST API chybové kódy.

Viz také

Úkon
Transformace dat
Seznam modulů a-Z