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.
- További információ a gépi tanulási projektek a ML Studióból a klasszikusból a Azure Machine Learning.
- További információ a Azure Machine Learning.
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, t1
a , 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 t1
adatké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 t1
a 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 hivatkozikWHERE
.
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 vagyRIGHT OUTER JOIN
FULL OUTER JOIN
.A és a utasítás
ADD COLUMN
RENAME TABLE
használható a paranccsalALTER TABLE
, de más záradékok nem támogatottak,DROP COLUMN
például a ,ALTER COLUMN
a ésADD CONSTRAINT
a .Az SQLite-ben létrehozhat egy NÉZETet, de ezt követően a nézetek csak olvashatók. Nézeten nem hajthat
DELETE
végre ,INSERT
vagyUPDATE
utasítást. Létrehozhat azonban egyDELETE
INSERT
UPDATE
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.