Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók
A továbbított számítás javítja a külső adatforrásokon lévő lekérdezések teljesítményét. Az SQL Server 2016-tól (13.x verzió) kezdődően az adat-továbbításos számítások elérhetők voltak a külső Hadoop adatforrásokhoz. Az SQL Server 2019 (15.x) bevezette a leküldéses számításokat más típusú külső adatforrások esetében.
Megjegyzés:
Annak megállapításához, hogy a PolyBase leküldéses számítása hasznos-e a lekérdezésben, olvassa el a Hogyan állapíthatja meg, hogy történt-e külső leküldés.
Leküldéses számítások engedélyezése
Az alábbi cikkek a leküldéses számítások konfigurálásával kapcsolatos információkat tartalmaznak bizonyos külső adatforrástípusokhoz:
- Pushdown számítás engedélyezése a Hadoopban
- A PolyBase konfigurálása külső adatokhoz való hozzáféréshez az Oracle-ben
- A PolyBase konfigurálása külső adatok eléréséhez a Teradata-ban
- A PolyBase konfigurálása külső adatok eléréséhez a MongoDB-ben
- A PolyBase konfigurálása külső adatok ODBC általános típusokkal való eléréséhez
- A PolyBase konfigurálása külső adatok sql serveren való eléréséhez
Ez a táblázat a pushdown számítások támogatását foglalja össze különféle külső adatforrások esetében.
| Adatforrás | Joins | Előrejelzések | Összesítések | Szűrők | statisztika |
|---|---|---|---|---|---|
| Általános ODBC | Igen | Igen | Igen | Igen | Igen |
| Oracle | Igen+ | Igen | Igen | Igen | Igen |
| SQL Server | Igen | Igen | Igen | Igen | Igen |
| Teradata | Igen | Igen | Igen | Igen | Igen |
| MongoDB* | No | Igen | Igen*** | Igen*** | Igen |
| Hadoop | No | Igen | Néhány** | Néhány** | Igen |
| Azure Blob-tároló | Nem | Nem | Nem | Nem | Igen |
* Az Azure Cosmos DB leküldéses támogatása a MongoDB-hez készült Azure Cosmos DB API-val engedélyezve van.
** Lásd a Pushdown-számításokat és a Hadoop-szolgáltatókat.
Az SQL Server 2019-hez készült MongoDB ODBC-összekötő összesítéseinek és szűrőinek leküldéses támogatása az SQL Server 2019 CU18-ban jelent meg.
+ Az Oracle támogatja az illesztések leküldését, de előfordulhat, hogy a leküldés eléréséhez statisztikákat kell létrehoznia az illesztési oszlopokról.
Megjegyzés:
A leküldéses számítást blokkolhatja néhány T-SQL-szintaxis. További információért tekintse meg a leküldést megakadályozó szintaxist.
Leküldéses feldolgozás és Hadoop szolgáltatók
A PolyBase jelenleg két Hadoop-szolgáltatót támogat: a Hortonworks Data Platformot (HDP) és a Cloudera Distributed Hadoopot (CDH). A pushdown számítás szempontjából nincs különbség a két funkció között.
Ha a számítási leküldéses funkciót a Hadooptal szeretné használni, a cél Hadoop-fürtnek rendelkeznie kell a HDFS, YARN és MapReduce alapvető összetevőivel, és engedélyezve van a feladatelőzmény-kiszolgáló. A PolyBase a MapReduce-on keresztül küldi el az átfuttatott lekérdezést, és lekéri az állapotot a feladattörténet-kiszolgálóról. Bármelyik összetevő nélkül a lekérdezés meghiúsul.
Az adatok SQL Serverre való elérése után bizonyos összesítésnek kell történnie. Az összesítés egy része azonban a Hadoopban történik. Ez a módszer gyakori a masszívan párhuzamos feldolgozási rendszerekben az összesítések számításában.
A Hadoop-szolgáltatók az alábbi összesítéseket és szűrőket támogatják.
| Összesítések | Szűrők (bináris összehasonlítás) |
|---|---|
| Count_Big | NotEqual |
| Összeg | Kevesebb mint |
| Átlag | Kisebb vagy egyenlő |
| Max | Nagyobb vagy egyenlő |
| Min | GreaterThan |
| Approx_Count_Distinct | Van |
| NemEz |
A "pushdown computation" legfontosabb hasznos forgatókönyvei
A PolyBase leküldéses számítás funkciójával számítási feladatokat delegálhat külső adatforrásokhoz. Ez csökkenti az SQL Server-példány számítási feladatait, és jelentősen javíthatja a teljesítményt.
Az SQL Server leküldheti az illesztéseket, előrejelzéseket, összesítéseket és szűrőket külső adatforrásokra, hogy kihasználhassa a távoli számítás előnyeit, és korlátozza a hálózaton keresztül küldött adatokat.
Kapcsolódások műveleteinek optimalizálása
A PolyBase sok esetben megkönnyítheti az összekapcsolási operátor leküldését két külső tábla összekapcsolásához ugyanazon külső adatforráson, ami jelentősen javítja a teljesítményt.
Ha az illesztés elvégezhető a külső adatforráson, ez csökkenti az adatáthelyezés mennyiségét, és javítja a lekérdezés teljesítményét. Illesztés-leküldés nélkül az összekapcsolni kívánt táblák adatait helyileg a tempdb-be kell hozni, majd összekapcsolva feldolgozni.
Elosztott illesztések esetén (ha egy helyi táblát egy külső táblához csatlakoztat), hacsak nincs szűrő az összekapcsolt külső táblán, a külső tábla összes adatát helyileg kell behozni tempdb az illesztési művelet végrehajtásához. Az alábbi lekérdezés például nem szűr a külső táblaillesztési feltételre, ami a külső tábla összes adatának olvasását eredményezi.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
Mivel az illesztés a külső tábla E.id oszlopán van, ha az oszlophoz szűrőfeltételt adunk, a szűrő leküldhető, ezáltal csökkentve a külső táblából beolvasott sorok számát.
SELECT * FROM LocalTable L
JOIN ExternalTable E on L.id = E.id
WHERE E.id = 20000
Sorok részhalmazának kijelölése
Predikátumleküldéssel javíthatja egy olyan lekérdezés teljesítményét, amely egy külső tábla sorainak egy részhalmazát választja ki.
Ebben a példában az SQL Server egy térkép-csökkentési feladatot kezdeményez a Hadoop-predikátumnak customer.account_balance < 200000 megfelelő sorok lekéréséhez. Mivel a lekérdezés sikeresen befejeződhet a tábla összes sorának vizsgálata nélkül, a rendszer csak a predikátumi feltételeknek megfelelő sorokat másolja az SQL Serverre. Ez jelentős időt takarít meg, és kevesebb ideiglenes tárterületet igényel, ha a 200000 ügyfélegyenlegek < száma kicsi a számlaegyenleggel >rendelkező ügyfelek számához képest = 200000.
SELECT * FROM customer WHERE customer.account_balance < 200000;
SELECT * FROM SensorData WHERE Speed > 65;
Oszlopok részhalmazának kijelölése
Predikátumleküldéssel javíthatja a teljesítményt egy olyan lekérdezés esetében, amely egy külső tábla oszlopainak egy részhalmazát választja ki.
Ebben a lekérdezésben az SQL Server egy MapReduce feladatot kezdeményez, hogy a Hadoop által tagolt szövegfájlt előfeldolgozza, így csak a customer.name és customer.zip_code oszlopok adatai kerülnek átmásolásra az SQL Serverbe.
SELECT customer.name, customer.zip_code
FROM customer
WHERE customer.account_balance < 200000;
Leküldés az alapszintű kifejezésekhez és operátorokhoz
Az SQL Server a következő alapkifejezéseket és operátorokat teszi lehetővé a predikátumleküldéshez.
- Bináris operátorok az összehasonlításhoz (
<,>,=,!=,<>,>=,<=) numerikus, dátum- és időértékekhez. - Számtani operátorok (
+,-,*,/,%). - Logikai operátorok (
AND,OR). - Unary operátorok (
NOT,IS NULL,IS NOT NULL).
Az operátorok BETWEEN, NOT, INés LIKE lehet, hogy le lesznek küldve. A tényleges viselkedés attól függ, hogy a lekérdezésoptimalizáló hogyan írja át az operátorkifejezéseket alapszintű relációs operátorokat használó utasítások sorozataként.
A példában szereplő lekérdezés több predikátumot is tartalmazhat, amelyeket le lehet küldeni a Hadoopba. Az SQL Server le tudja küldeni a térkép-csökkentési feladatokat a Hadoopba a predikátum customer.account_balance <= 200000végrehajtásához. A kifejezés BETWEEN 92656 AND 92677 bináris és logikai műveletekből is áll, amelyek leküldhetők a Hadoopba. A logikai AND in customer.account_balance AND customer.zipcode egy végső kifejezés.
A predikátumok ezen kombinációját figyelembe véve a térkép-csökkentési feladatok az összes WHERE záradékot végrehajthatják. A rendszer csak a SELECT feltételeknek megfelelő adatokat másolja vissza az SQL Serverre.
SELECT * FROM customer
WHERE customer.account_balance <= 200000
AND customer.zipcode BETWEEN 92656 AND 92677;
Támogatott függvények leküldéshez
Az SQL Server a következő függvényeket teszi lehetővé a predikátum leküldéséhez.
Karakterlánc függvények
CONCATDATALENGTHLENLIKELOWERLTRIMRTRIMSUBSTRINGUPPER
Matematikai függvények
ABSACOSASINATANCEILINGCOSEXPFLOORPOWERSIGNSINSQRTTAN
Általános függvények
COALESCE*NULLIF
* A COLLATE használata bizonyos esetekben megakadályozhatja a leküldést. További információért lásd: Rendezési ütközés.
Dátum- és időfüggvények
DATEADDDATEDIFFDATEPART
Szintaxis, amely megakadályozza a pushdown-t
A következő T-SQL-függvények vagy szintaxisok megakadályozzák a leküldéses számítást:
AT TIME ZONECONCAT_WSTRANSLATERANDCHECKSUMBINARY_CHECKSUMHASHBYTESISJSONJSON_VALUEJSON_QUERYJSON_MODIFYNEWIDSTRING_ESCAPECOMPRESSDECOMPRESSGREATESTLEASTPARSE
Az SQL Server 2019 (15.x) CU10-ben bevezettük a leküldéses támogatást a FORMAT és TRIM szintaxis számára.
Szűrő feltétel változóval
Ha változót ad meg egy szűrőzáradékban, ez alapértelmezés szerint megakadályozza a szűrő záradék leküldését. Amennyiben például a következő lekérdezést futtatja, a szűrőkifejezés nem lesz végrehajtva.
DECLARE @BusinessEntityID INT
SELECT * FROM [Person].[BusinessEntity]
WHERE BusinessEntityID = @BusinessEntityID;
A változó leküldésének eléréséhez engedélyeznie kell a lekérdezés-optimalizáló gyorsjavítások funkcióját. Ez az alábbi módokon végezhető el:
- Példányszint: A 4199-es nyomkövetési jelző engedélyezése a példány indítási paramétereként
- Adatbázisszint: A PolyBase külső objektumokkal rendelkező adatbázis kontextusában hajtsa végre a
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON - Lekérdezési szint: Használja a lekérdezési jelzést
OPTION (QUERYTRACEON 4199)vagyOPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'))
Ez a korlátozás a sp_executesql végrehajtására vonatkozik. A korlátozás a szűrőzáradék egyes függvényeinek kihasználtságára is vonatkozik.
A változó leküldésének képessége először az SQL Server 2019 CU5-ben lett bevezetve.
Rendezési ütközés
Előfordulhat, hogy az adatok különböző összehasonlítási rendje miatt a pushdown nem lehetséges. A hasonló COLLATE operátorok is zavarhatják az eredményt. Az egyenlő rendezések és a bináris rendezések támogatottak. További információért lásd: Hogyan állapíthatja meg, hogy történt-e leküldés.
Parquet-fájlok optimalizálása
Az SQL Server 2022-től kezdve (16.x) a PolyBase bevezette a parquet-fájlok támogatását. Az SQL Server képes sor- és oszlopeliminálást végrehajtani, miközben a leküldést a Parquet formátummal hajtja végre. A parquet-fájloknál a következő műveleteket lehet leképzíteni:
- Bináris összehasonlító operátorok (>, >=, <=, <) numerikus, dátum- és időértékekhez.
- Összehasonlító operátorok kombinációja (> AND <, >= AND <, > AND <=, <= AND >=).
- Listaszűrőben (col1 = val1 VAGY col1 = val2 VAGY vol1 = val3).
- NEM NULL érték az oszlop felett.
Az alábbiak jelenléte megakadályozza a pushdown alkalmazását a parquet-fájlok esetében.
- Virtuális oszlopok.
- Oszlop-összehasonlítás.
- Paramétertípus konvertálása.
Támogatott adattípusok
- Bit
- TinyInt
- SmallInt
- BigInt
- reál
- Lebegés
- VARCHAR (Bin2Collation, CodePageConversion, BinCollation)
- NVARCHAR (Bin2Collation, BinCollation)
- Binary
- DateTime2 (alapértelmezett és 7 jegyű pontosság)
- Date
- Idő (alapértelmezett és 7 jegyű pontosság)
- Numerikus*
* Támogatott, ha a paraméterskálázás az oszlopmérethez igazodik, vagy ha a paraméter explicit módon tizedesjelre van adva.
Adattípusok, amelyek megakadályozzák a Parquet szűkítését
- Pénz
- SmallMoney
- DateTime
- SmallDateTime
Példák
Leküldés kényszerítése
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (FORCE EXTERNALPUSHDOWN);
Pushdown letiltása
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65
OPTION (DISABLE EXTERNALPUSHDOWN);
Kapcsolódó tartalom
- További információ a PolyBase-ről: Adatok virtualizálása a PolyBase használatával
- Hogyan ismerheti fel, hogy külső nyomás-leadás történt-e