SQL-átalakítás alkalmazása

Fontos

A (klasszikus) Machine Learning Studio támogatása 2024. augusztus 31-én megszűnik. Javasoljuk, hogy addig térjen át az Azure Machine Learning használatára.

2021. december 1-től kezdve nem fog tudni létrehozni új (klasszikus) Machine Learning Studio-erőforrásokat. 2024. augusztus 31-ig továbbra is használhatja a meglévő (klasszikus) Machine Learning Studio-erőforrásokat.

A (klasszikus) ML Studio dokumentációjának kivezetése folyamatban van, és a jövőben nem várható a frissítése.

SQLite-lekérdezést futtat a bemeneti adatkészleten az adatok átalakításához

Kategória: Adatátalakítás /-manipuláció

Megjegyzés

A következőkre vonatkozik: Machine Learning Studio (klasszikus)

Hasonló húzással használható modulok érhetők el Azure Machine Learning tervezőben.

A modul áttekintése

Ez a cikk azt ismerteti, hogyan használható az Apply SQL Transformation (Átalakítás alkalmazása) modul a Machine Learning Studio (klasszikus) moduljában egy SQL-lekérdezés megadásához egy bemeneti adatkészleten vagy adatkészleten.

SQL akkor hasznos, ha összetett módokon kell módosítania az adatokat, vagy más környezetekben való használatra meg kellőrzöttnek kell azokat használnia. Az Apply SQL Transformation (Átalakítás alkalmazása) modullal például a következőt használhatja:

  • Táblákat hozhat létre az eredményekhez, és egy hordozható adatbázisban mentheti az adatkészleteket.

  • Egyéni átalakítások végrehajtása adattípuson, vagy összesítések létrehozása.

  • Hajtsa SQL lekérdezési utasításokat az adatok szűréséhez vagy megváltoztatásához, és a lekérdezés eredményeit adattáblaként adja vissza.

Fontos

A SQL modulban használt motor az SQLite. Ha nem ismeri az SQLite szintaxist, mindenképpen olvassa el a cikk szintaxissal és használattal vonatkozó szakaszát példákért.

Mi az az SQLite?

Az SQLite egy nyilvános tartomány relációsadatbázis-kezelő rendszere, amely egy C programozási kódtárban található. Az SQLite népszerű választás a webböngészők helyi tárolására használt beágyazott adatbázisként.

Az SQLite-t eredetileg 2000-ben tervezték az Egyesült ÁllamokHoz, hogy támogassa a kiszolgáló nélküli tranzakciókat. Ez egy önálló adatbázismotor, amely nem rendelkezik felügyeleti rendszerrel, ezért nincs szükség konfigurálásra vagy felügyeletre.

A transzformáció alkalmazása SQL konfigurálása

A modul legfeljebb három adatkészletet képes bemenetként venni. Amikor az egyes bemeneti portok adatkészleteire hivatkozik, t1a , t2és neveket kell használnia t3. A tábla száma a bemeneti port indexét jelzi.

A fennmaradó paraméter egy SQL lekérdezés, amely az SQLite szintaxist használja. Ez a modul az SQLite szintaxis összes standard utasítását támogatja. A nem támogatott utasítások listáját a Műszaki megjegyzések szakaszban láthatja .

Általános szintaxis és használat

  • Ha több sort ír be a SQL Szkript szövegmezőbe, pontosvesszővel bontsa le az egyes utasítást. Ellenkező esetben a sortörések szóközökké alakulnak.

    Az alábbi utasítások például egyenértékűek:

    SELECT   
    *   
    from   
    t1;  
    
    SELECT * from t1;  
    
  • Megjegyzéseket adhat hozzá az -- egyes sorok elején, vagy szöveg bezárásával a használatával /* */.

    Ez az utasítás például érvényes:

    SELECT * from t1  
    /*WHERE ItemID BETWEEN 1 AND 100*/;  
    
  • Ha egy oszlopnév duplikálta egy fenntartott kulcsszó nevét, a rendszer szintaxiskiemelőt alkalmaz a SQL szövegmezőben. A félreértések elkerülése érdekében az oszlopneveket szögletes zárójelek (a Transact-SQL konvenciónak megfelelő) vagy aposztrófok vagy dupla idézőjelek (az ANSI SQL konvenciója) közé kell tenni.

    Az alábbi lekérdezésben például a Vörösvértök adatkészletben az Idő egy érvényes oszlopnév , de egyben fenntartott kulcsszó is.

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

    Ha a lekérdezést az adott állapotában futtatja, előfordulhat, hogy a lekérdezés a megfelelő eredményeket adja vissza, de az adatkészlettől függően hibát ad vissza. Íme néhány példa a probléma elkerülésére:

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

    Megjegyzés

    A szintaxiskiemelő akkor is a kulcsszón marad, ha idézőjelek vagy szögletes zárójelek között van.

  • Az SQLite nem megkülönbözteti a kis- és nagybetűket, kivéve néhány olyan parancsot, amelyek eltérő jelentéssel bírnak a kis- és nagybetűk megkülönböztetése esetén (GLOB vagy glob).

SELECT utasítás

A utasításban SELECT az azonosítókban szóközöket vagy egyéb karaktereket tartalmazó oszlopneveket dupla idézőjelek, szögletes zárójelek vagy a backtick karakterek () közé kell foglalni.

Ez a lekérdezés például a Two-Class Iris t1adatkészletére hivatkozik, de az egyik oszlopnév egy tiltott karaktert tartalmaz, ezért az oszlop neve idézőjelek között található.

SELECT class, "sepal-length" FROM t1;  

Hozzáadhat egy záradékot az WHERE adatkészlet értékeinek szűréséhez.

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

Az SQLite szintaxis nem támogatja a TOP Transact-SQL. Ehelyett használhatja a kulcsszót LIMIT vagy egy utasítást FETCH .

Hasonlítsa össze például ezeket a lekérdezéseket a Bike Rental adatkészletben.

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

Összekapcsolások

Az alábbi példák a hez tartozó bemeneti portOn t1a Restaurant Ratings adatkészletet, a hez tartozó bemeneti porton pedig a Restaurant Features adatkészletet használják t2.

Az alábbi utasítás összekapcsolja a két táblát, és létrehoz egy adatkészletet, amely kombinálja a megadott éttermi funkciókat és az egyes éttermekre vonatkozó átlagos értékeléseket.

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;  

Aggregátumfüggvények

Ez a szakasz az SQLite használatával SQL néhány gyakori aggregátum-függvényre mutat be alapszintű példákat.

A jelenleg támogatott aggregátum függvények: AVG, COUNT, MAX, MIN, SUM, TOTAL.

A következő lekérdezés egy adatkészletet ad vissza, amely tartalmazza az étterem azonosítóját, valamint az étteremre vonatkozó átlagos értékelést.

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

Sztringek kezelése

Az SQLite támogatja a kétláncos operátort a sztringek összeágyazásához.

Az alábbi utasítás egy új oszlopot hoz létre két szöveges oszlop összezáltatásával.

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

Figyelmeztetés

A Transact-SQL sztring-össze concatenation operátor nem támogatott: + (Sztring-össze concatenation). A példalekérdezésben ('city + '-' + state) AS 'Target Region'például a kifejezés 0 értéket ad vissza az összes értékhez.

Annak ellenére azonban, hogy az operátor nem támogatott ehhez az adattípushoz, a függvény nem jelez hibát Machine Learning. Ellenőrizze az Apply SQL Transformation (Átalakítás alkalmazása) eredményét, mielőtt az eredményül kapott adatkészletet felhasználja egy kísérletben.

COALESCE és CASE

COALESCE több argumentumot értékel ki sorrendben, és visszaadja az első olyan kifejezés értékét, amely nem null értéket ad vissza.

Ez a többosztályos adatkészletre vonatkozó lekérdezés például az első nem null értékű jelzőt adja vissza azon oszlopok listájából, amelyekről feltételezhető, hogy kölcsönösen kizárják egymást. Ha nem található jelző, a "nincs" sztring lesz visszaadva.

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

A CASE utasítás hasznos az értékek tesztelésére és egy új érték visszaadása a kiértékelt eredmények alapján. Az SQLite a következő szintaxist támogatja az utasításokhoz CASE :

  • CASE WHEN [feltétel] THEN [kifejezés] ELSE [kifejezés] END

  • CASE [kifejezés] WHEN [value] THEN [kifejezés] ELSE [kifejezés] END

Tegyük fel például, hogy korábban a Convert to Indicator Values (Állapotjelző értékekké alakítás) modullal létrehozott egy igaz-hamis értékeket tartalmazó jellemzőoszlopokat. A következő lekérdezés több jellemzőoszlop értékeit egyetlen többértékű oszlopba csukja össze.

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éldák

A modul machine learning-kísérletekben való használatával kapcsolatban lásd ezt a mintát a Azure AI Gallery:

  • Alkalmazás SQL átalakítás: A Restaurant Ratings, a Restaurant Features és a Restaurant Customers adatkészletet használja az egyszerű illesztés, a select utasítások és az aggregátum-függvények szemléltetésére.

Technikai megjegyzések

Ez a szakasz az implementáció részleteit, a tippeket és a gyakori kérdésekre adott válaszokat tartalmazza.

  • A bemenetre mindig szükség van az 1-es porton.

  • Ha a bemeneti adatkészlet oszlopnevekkel rendelkezik, a kimeneti adatkészlet oszlopai a bemeneti adatkészlet oszlopnevét fogják használni.

    Ha a bemeneti adatkészlet nem rendelkezik oszlopnevekkel, a táblázatban szereplő oszlopnevek automatikusan létrejönnek a következő elnevezési konvencióval: T1COL1, T1COL2, T1COL3 stb., ahol a számok a bemeneti adatkészlet egyes oszlopai indexét jelölik.

  • A szóközt vagy SELECT egyéb speciális karaktereket tartalmazó oszlopazonosítóknál az oszlopazonosítót mindig szögletes zárójelek vagy dupla idézőjelek közé kell tenni, amikor az vagy a záradék oszlopára hivatkozik WHERE .

Nem támogatott utasítások

Bár az SQLite támogatja az ANSI SQL szabvány nagy része, nem tartalmaz számos olyan funkciót, amelyet a kereskedelmi relációs adatbázisrendszerek támogatnak. További információ: SQL SQLite által megértett. Vegye figyelembe a következő korlátozásokat is a SQL létrehozásakor:

  • Az SQLite dinamikus gépelést használ az értékekhez ahelyett, hogy típust rendel egy oszlophoz a legtöbb relációs adatbázisrendszerhez képest. Gyenge típusos, és implicit típuskonverziót tesz lehetővé.

  • LEFT OUTER JOIN A van megvalósítva, de nem vagy RIGHT OUTER JOINFULL OUTER JOIN.

  • A és a utasítás ADD COLUMNRENAME TABLE használható a paranccsalALTER TABLE, de más záradékok nem támogatottak, DROP COLUMNpéldául a , ALTER COLUMNa és ADD CONSTRAINTa .

  • Az SQLite-ben létrehozhat egy NÉZETet, de ezt követően a nézetek csak olvashatók. Nézeten nem hajthat DELETEvégre , INSERTvagy UPDATE utasítást. Létrehozhat azonban egy DELETEINSERTUPDATE eseményindítót, amely egy , vagy egy nézetre tett kísérlettel aktiválódik, és más műveleteket hajt végre az eseményindító törzsében.

A hivatalos SQLite webhelyen elérhető nem támogatott függvények listája mellett a következő wiki más nem támogatott funkciók listáját is tartalmazza: SQLite – Nem támogatott SQL

Várt bemenetek

Név Típus Description
Table1 Adattábla Bemeneti adatkészlet1
2. tábla Adattábla Bemeneti adatkészlet2
3. tábla Adattábla Bemeneti adatkészlet3

Modulparaméterek

Name Tartomány Típus Alapértelmezett Description
SQL lekérdezési szkript használata bármelyik StreamReader SQL lekérdezési utasítás

Kimenetek

Név Típus Description
Eredményadatkészlet Adattábla Kimeneti adatkészlet

Kivételek

Kivétel Description
0001-es hiba Kivétel történik, ha az adatkészlet egy vagy több megadott oszlopa nem található.
0003-as hiba Kivétel történik, ha egy vagy több bemeneti adatkészlet null vagy üres.
0069-es hiba SQL logikai hiba vagy hiányzó adatbázis

A Studio (klasszikus) moduljaival kapcsolatos hibák listájáért tekintse meg a Machine Learning hibakódokat.

Az API-kivételek listájáért tekintse meg a Machine Learning REST API hibakódokat.

Lásd még

Manipuláció
Adatátalakítás
A–Z modullista